Öğretici: 5. kısım, Contoso Üniversitesi örneğine geçişler uygulama
Bu öğreticide, veri modeli değişikliklerini yönetmek için EF Core geçişleri özelliğini kullanmaya başlayabilirsiniz. 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öntemleri inceleyin
- Veri modeli anlık görüntüsü hakkında bilgi edinin
- Geçişi Uygula
Önkoşullar
Geçişler hakkında
Yeni bir uygulama geliştirirken, veri modeliniz sıklıkla değişir ve model her değiştiğinde veritabanıyla eşitlenmemiş olur. Mevcut değilse veritabanını oluşturmak için Entity Framework yapılandırarak bu öğreticileri başlatmış olursunuz. Veri modelini her değiştirdiğinizde (varlık sınıfları ekleyin, kaldırın veya değiştirin ya da DbContext sınıfınızı değiştirin); veritabanını silebilir ve EF, modelle eşleşen yeni bir tane oluşturur ve test verileriyle birlikte olur.
Veritabanını veri modeliyle eşitlenmiş halde tutma yöntemi, uygulamayı üretime dağıtana kadar iyi çalışır. Uygulama üretimde çalışırken, genellikle tutmak istediğiniz verileri saklar ve yeni sütun ekleme gibi her değişiklik yaptığınızda her şeyi kaybetmek istemezsiniz. EF Core geçişleri özelliği, yeni bir veritabanı oluşturmak yerine EF 'in veritabanı şemasını güncelleştirmesine olanak sağlayarak bu sorunu çözer.
geçişlerle çalışmak için Paket Yöneticisi konsolunu (PMC) veya clı 'yi kullanabilirsiniz. Bu öğreticiler CLı komutlarının nasıl kullanılacağını göstermektedir. PMC hakkındaki bilgiler Bu öğreticinin sonunda.
Veritabanını bırak
EF Core araçlarını küresel bir araç olarak yükleyip veritabanını silin:
dotnet tool install --global dotnet-ef
dotnet ef database drop
Aşağıdaki bölümde CLı komutlarının nasıl çalıştırılacağı açıklanmaktadır.
İlk geçiş oluşturma
Değişikliklerinizi kaydedin ve projeyi derleyin. Sonra bir komut penceresi açın ve proje klasörüne gidin. Bunu yapmanın hızlı bir yolu aşağıda verilmiştir:
Çözüm Gezgini' de projeye sağ tıklayın ve bağlam menüsünden klasörü dosya Gezgini 'nde 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 çıktı 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'
başka bir işlem tarafından kullanıldığından "dosya... ContosoUniversity.dll dosyasına erişilemiyor." bir hata iletisi görürseniz, Windows sistem tepsisinde IIS Express simgesini bulun ve sağ tıklayın ve sonra da contosouniversity > siteyi durdur' a tıklayın.
Yukarı ve aşağı yöntemleri inceleyin
migrations addKomutunu çalıştırdığınızda, EF, veritabanını sıfırdan oluşturacak kodu oluşturmuş olur. Bu kod, <timestamp> _InitialCreate. cs adlı dosyadaki geçişler klasöründedir. UpSınıfının yöntemi, InitialCreate veri modeli varlık kümelerine karşılık gelen veritabanı tablolarını oluşturur ve Down Aşağıdaki örnekte gösterildiği gibi yöntemi onları 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, Up geçiş için veri modeli değişikliklerini uygulamak üzere yöntemini çağırır. Güncelleştirmeyi geri almak için bir komut girdiğinizde, geçişler Down yöntemini çağırır.
Bu kod, komutunu girdiğinizde oluşturulan ilk geçişe yöneliktir migrations add InitialCreate . Geçiş adı parametresi (örnekteki "ınitialcreate") dosya adı için kullanılır ve istediğiniz her şey olabilir. Geçiş sırasında nelerin yapıldığını özetleyen bir sözcük veya tümcecik seçmek en iyisidir. Örneğin, "AddDepartmentTable" adlı bir geçişe daha sonra ad yazabilirsiniz.
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ırması gerekmez. Uygulamayı, veritabanının mevcut olmadığı başka bir ortama dağıttığınızda, bu kod veritabanınızı oluşturmak için çalışır, bu nedenle ilk önce test etmek iyi bir fikirdir. Bu nedenle veritabanını daha önce bıraktığınız gibi, geçişler sıfırdan yeni bir tane oluşturabilir.
Veri modeli anlık görüntüsü
Geçişler, geçiş/SchoolContextModelSnapshot. cs içinde geçerli veritabanı şemasının bir anlık görüntüsünü oluşturur. Bir geçiş eklediğinizde EF, veri modeli Snapshot dosyası ile karşılaştırılarak nelerin değiştirildiğini belirler.
Bir geçişi kaldırmak için DotNet EF geçişleri kaldır 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. dotnet ef migrations removeBaşarısız olursa, dotnet ef migrations remove -v hata hakkında daha fazla bilgi almak için kullanın.
Anlık görüntü dosyasının nasıl kullanıldığı hakkında daha fazla bilgi için bkz. Takım ortamlarında EF Core geçişleri .
Geçişi Uygula
Komut penceresinde, veritabanı ve tabloları oluşturmak için aşağıdaki komutu girin.
dotnet ef database update
komutun çıktısı migrations add komuta benzer, ancak veritabanını oluşturan SQL komutlarının günlüklerini görmeniz gerekir. Günlüklerin çoğu aşağıdaki örnek çıktıda atlanır. Günlük iletilerinde bu ayrıntı düzeyini görmemeyi tercih ediyorsanız, dosyadaki appsettings.Development.js günlük düzeyini değiştirebilirsiniz. Daha fazla bilgi için bkz. .NET Core ve ASP.NET Core'da günlük.
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.
ilk öğreticide yaptığınız gibi veritabanını incelemek için SQL Server Nesne Gezgini kullanın. _ _ Hangi geçişlerin veritabanına uygulandığını izleyen bir EFMigrationsHistory tablosunun eklenmesini fark edeceksiniz. Bu tablodaki verileri görüntüleyin ve ilk geçiş için bir satır görürsünüz. (Önceki CLı çıkış örneğinde son oturum, bu satırı oluşturan INSERT ifadesini gösterir.)
Her şeyin daha önce olduğu gibi çalıştığını doğrulamak için uygulamayı çalıştırın.

CLı ve PMC karşılaştırması
geçişleri yönetmeye yönelik EF araçları, Visual Studio Paket Yöneticisi konsolu (PMC) penceresindeki .NET Core CLI komutlardan veya PowerShell cmdlet 'lerinde bulunabilir. Bu öğreticide, CLı 'nın nasıl kullanılacağı gösterilmektedir, ancak isterseniz PMC 'yi kullanabilirsiniz.
PMC komutlarına yönelik EF komutları Microsoft. EntityFrameworkCore. Tools paketidir. Bu paket, Microsoft.AspNetCore.app metapackage'e dahil edilmiştir. bu nedenle, uygulamanız için bir paket başvurusu varsa bir paket başvurusu eklemeniz gerekmez Microsoft.AspNetCore.App .
Önemli: Bu, . csproj dosyasını düzenleyerek CLI için yüklediğiniz paket ile aynı değildir. Bu adın adı Tools ile BITEN CLI paketi adından farklı olarak Tools.DotNet .
CLı komutları hakkında daha fazla bilgi için bkz. .NET Core CLI.
PMC komutları hakkında daha fazla bilgi için bkz. Paket Yöneticisi Console (Visual Studio).
Kodu alma
Tamamlanmış uygulamayı indirin veya görüntüleyin.
Sonraki adım
Veri modelini genişletme hakkında daha gelişmiş konulara bakmak için sonraki öğreticiye ilerleyin. Ek geçişler oluşturma ve uygulama gibi.