Öğretici: 5. Bölüm, Contoso University örneğine geçişleri uygulama
Bu öğreticide, veri modeli değişikliklerini yönetmek için geçişler özelliğini kullanmaya EF Core başlayacaksınız. Sonraki öğreticilerde, veri modelini değiştirirken daha fazla geçiş ekleyeceksiniz.
Bu öğreticide şunları yaptınız:
- Geçişler hakkında bilgi edinin
- İlk geçiş oluşturma
- Yukarı ve Aşağı yöntemlerini inceleme
- Veri modeli anlık görüntüsü hakkında bilgi edinin
- Geçişi uygulama
Önkoşullar
Geçişler hakkında
Yeni bir uygulama geliştirirken veri modeliniz sık sık değişir ve model her değiştiğinde veritabanıyla eşitlenmez. Bu öğreticileri, varlık çerçevesi yoksa veritabanını oluşturacak şekilde yapılandırarak başlattınız. Ardından veri modelini her değiştirdiğinizde (varlık sınıflarını eklediğinizde, kaldırdığınızda veya değiştirdiğinizde ya da DbContext sınıfınızı değiştirdiğinizde), veritabanını silebilirsiniz ve EF modelle eşleşen yeni bir tane oluşturur ve test verileriyle bunu tohumlar.
Veritabanını veri modeliyle eşitlenmiş durumda tutmanın bu yöntemi, uygulamayı üretim ortamına dağıtana kadar düzgün çalışır. Uygulama üretimde çalışırken genellikle saklamak istediğiniz verileri depolar ve yeni sütun ekleme gibi her değişiklik yaptığınızda her şeyi kaybetmek istemezsiniz. EF Core Geçişler özelliği, EF'nin yeni veritabanı oluşturmak yerine veritabanı şemasını güncelleştirmesini etkinleştirerek bu sorunu çözer.
Geçişlerle çalışmak için Paket Yöneticisi Konsolunu (PMC) veya CLI'yı kullanabilirsiniz. Bu öğreticilerde CLI komutlarının nasıl kullanılacağı gösterilmektedir. PMC hakkındaki bilgiler bu öğreticinin sonundadır.
Veritabanını bırakma
Araçları genel bir araç olarak yükleyin EF Core ve veritabanını silin:
dotnet tool install --global dotnet-ef
dotnet ef database drop
Not
Varsayılan olarak yüklenecek .NET ikili dosyalarının mimarisi şu anda çalışan işletim sistemi mimarisini temsil eder. Farklı bir işletim sistemi mimarisi belirtmek için bkz . dotnet tool install, --arch option. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #29262.
Aşağıdaki bölümde CLI komutlarının nasıl çalıştırılacakları açıklanmaktadır.
İlk geçiş oluşturma
Değişikliklerinizi kaydedin ve projeyi oluşturun. Ardından bir komut penceresi açın ve proje klasörüne gidin. Bunu yapmak için hızlı bir yol:
Çözüm Gezgini'da projeye sağ tıklayın ve bağlam menüsünden Klasörü Dosya Gezgini Aç'ı seçin.
Adres çubuğuna "cmd" yazın ve Enter tuşuna basın.
Komut penceresine aşağıdaki komutu girin:
dotnet ef migrations add InitialCreate
Yukarıdaki komutlarda aşağıdakine benzer bir çıkış görüntülenir:
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
Done. To undo this action, use 'ef migrations remove'
"Dosyaya erişilemiyor... ContosoUniversity.dll çünkü başka bir işlem tarafından kullanılıyor.", Windows Sistem Tepsisi'nde IIS Express simgesini bulun ve sağ tıklayın, ardından ContosoUniversity > Durdurma Sitesi'ne tıklayın.
Yukarı ve Aşağı yöntemlerini inceleme
Komutunu yürütürken migrations add
EF, veritabanını sıfırdan oluşturacak kodu oluşturdu. Bu kod Migrations klasöründe, adlı <timestamp>_InitialCreate.cs
dosyada yer alır. Up
sınıfının yöntemiInitialCreate
, veri modeli varlık kümelerine karşılık gelen veritabanı tablolarını oluşturur ve Down
yöntemi, aşağıdaki örnekte gösterildiği gibi bunları siler.
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Course",
columns: table => new
{
CourseID = table.Column<int>(nullable: false),
Credits = table.Column<int>(nullable: false),
Title = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Course", x => x.CourseID);
});
// Additional code not shown
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Enrollment");
// Additional code not shown
}
}
Geçişler, geçiş için veri modeli değişikliklerini uygulamak için yöntemini çağırır Up
. Güncelleştirmeyi geri almak için bir komut girdiğinizde Migrations yöntemini çağırır Down
.
Bu kod, komutu girdiğinizde oluşturulan ilk geçişe yöneliktir migrations add InitialCreate
. Geçiş adı parametresi ("Örnekte initialCreate") dosya adı için kullanılır ve istediğiniz gibi olabilir. Geçişte yapılan işlemleri özetleyen bir sözcük veya tümcecik seçmek en iyisidir. Örneğin, sonraki bir geçişi "AddDepartmentTable" olarak adlandırabilirsiniz.
Veritabanı zaten mevcut olduğunda ilk geçişi oluşturduysanız, veritabanı oluşturma kodu oluşturulur, ancak veritabanı veri modeliyle zaten eşleştiğinden çalıştırılması gerekmez. Uygulamayı veritabanının henüz mevcut olmadığı başka bir ortama dağıttığınızda, bu kod veritabanınızı oluşturmak için çalışır, bu nedenle önce test etmek iyi bir fikirdir. Bu nedenle veritabanını daha önce bıraktınız; böylece geçişler sıfırdan yeni bir veritabanı oluşturabilir.
Veri modeli anlık görüntüsü
Geçişler, içinde Migrations/SchoolContextModelSnapshot.cs
geçerli veritabanı şemasının anlık görüntüsünü oluşturur. Geçiş eklediğinizde EF, veri modelini anlık görüntü dosyasıyla karşılaştırarak nelerin değiştiğini belirler.
Geçişi kaldırmak için dotnet ef migrations remove komutunu kullanın. dotnet ef migrations remove
geçişi siler ve anlık görüntünün doğru şekilde sıfırlanmasını sağlar. Başarısız olursa dotnet ef migrations remove
, hata hakkında daha fazla bilgi almak için kullanın dotnet ef migrations remove -v
.
Anlık görüntü dosyasının nasıl kullanıldığı hakkında daha fazla bilgi için bkz EF Core . Ekip Ortamlarında Geçişler.
Geçişi uygulama
Komut penceresinde, veritabanını ve tabloları oluşturmak için aşağıdaki komutu girin.
dotnet ef database update
Komutun çıktısı komutuna migrations add
benzer, ancak veritabanını ayarlayan SQL komutlarının günlüklerini görürsünüz. Günlüklerin çoğu aşağıdaki örnek çıktıda atlanmıştır. Günlük iletilerinde bu ayrıntı düzeyini görmek istemiyorsanız, dosyadaki appsettings.Development.json
günlük düzeyini değiştirebilirsiniz. Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (274ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
CREATE DATABASE [ContosoUniversity2];
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (60ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
IF SERVERPROPERTY('EngineEdition') <> 5
BEGIN
ALTER DATABASE [ContosoUniversity2] SET READ_COMMITTED_SNAPSHOT ON;
END;
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
<logs omitted for brevity>
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20190327172701_InitialCreate', N'5.0-rtm');
Done.
İlk öğreticide yaptığınız gibi veritabanını incelemek için SQL Server Nesne Gezgini kullanın. Veritabanına hangi geçişlerin uygulandığını izleyen bir __EFMigrationsHistory tablosu eklendiğini göreceksiniz. Bu tablodaki verileri görüntülerseniz ilk geçiş için bir satır görürsünüz. (Önceki CLI çıktı örneğindeki son günlük, bu satırı oluşturan INSERT deyimini gösterir.)
Her şeyin hala öncekiyle aynı şekilde çalıştığını doğrulamak için uygulamayı çalıştırın.
CLI ve PMC karşılaştırması
Geçişleri yönetmek için EF araçları Visual Studio Paket Yöneticisi Konsolu (PMC) penceresinde .NET CLI komutlarından veya PowerShell cmdlet'lerinden kullanılabilir. Bu öğreticide CLI'nın nasıl kullanılacağı gösterilir, ancak isterseniz PMC'yi kullanabilirsiniz.
PMC komutları için EF komutları Microsoft.EntityFrameworkCore.Tools paketindedir. Bu paket Microsoft.AspNetCore.App meta paketine dahil olduğundan, uygulamanızın için Microsoft.AspNetCore.App
paket başvurusu varsa paket başvurusu eklemeniz gerekmez.
Önemli: Bu, dosyayı düzenleyerek CLI için yüklediğiniz paketle .csproj
aynı değildir. Bunun adı, ile biten CLI paketi adından farklı olarak ile biterTools
Tools.DotNet
.
CLI komutları hakkında daha fazla bilgi için bkz . .NET CLI.
PMC komutları hakkında daha fazla bilgi için bkz. Paket Yöneticisi Konsolu (Visual Studio).
Kodu alma
Tamamlanan uygulamayı indirin veya görüntüleyin.
Sonraki adım
Veri modelini genişletme hakkında daha gelişmiş konulara bakmaya başlamak için sonraki öğreticiye ilerleyin. Bu yolda ek geçişler oluşturup uygulayacaksınız.
ASP.NET Core