Aracılığıyla paylaş


Geçişlere Genel Bakış

Gerçek dünya projelerinde özellikler uygulandıkça veri modelleri değişir: yeni varlıklar veya özellikler eklenir ve kaldırılır ve uygulamayla eşitlemeyi korumak için veritabanı şemalarının uygun şekilde değiştirilmesi gerekir. EF Core'daki geçişler özelliği, veritabanındaki mevcut verileri korurken veritabanı şemasını uygulamanın veri modeliyle eşitlenmiş durumda tutmak için aşamalı olarak güncelleştirmeye yönelik bir yol sağlar.

Üst düzey bir bakışla geçişler şu şekilde çalışır:

  • Bir veri modeli değişikliği yapıldığında, geliştirici veritabanı şemasını eşitlenmiş durumda tutmak için gereken güncelleştirmelerin açıklandığı ilgili geçişi eklemek üzere EF Core araçlarını kullanır. EF Core geçerli modeli eski modelin anlık görüntüsüyle karşılaştırarak farklılıkları saptar ve geçiş kaynağı dosyalarını oluşturur; dosyalar, projenizin kaynak denetiminde aynı diğer kaynak dosyalar gibi izlenebilir.
  • Yeni geçiş oluşturulduktan sonra çeşitli yollarla bir veritabanına uygulanabilir. EF Core tüm uygulanan geçişleri özel bir geçmiş tablosuna kaydeder ve bu yolla hangi geçişlerin uygulandığını ve hangilerinin uygulanmadığını bilebilir.

Bu sayfanın kalan kısmında geçişleri kullanmak için adım adım bir başlangıç kılavuzu yer alır. Daha ayrıntılı bilgiler için bu bölümün diğer sayfalarına bakın.

Başlarken

Aşağıdaki basit modeli içeren ilk EF Core uygulamanızı yeni tamamladığınızı varsayalım:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Geliştirme sırasında hızla yineleme yapmak ve modelinizi gerektiği gibi değiştirmek için Oluşturma ve Bırakma API'lerini kullanmış olabilirsiniz; ama artık uygulamanız üretime geçiyor, dolayısıyla veritabanının tamamını bırakmadan şemayı güvenli bir şekilde geliştirmenin bir yolunu bulmanız gerekiyor.

Araçları yükleme

İlk olarak EF Core komut satırı araçlarını yüklemeniz gerekir:

İlk geçişinizi oluşturma

Artık ilk geçişinizi eklemeye hazırsınız! EF Core'a InitialCreate adlı bir geçiş oluşturmasını bildirin:

dotnet ef migrations add InitialCreate

EF Core projenizde Migrations adlı bir dizin ve bazı dosyalar oluşturuyor. EF Core'un tam olarak ne oluşturduğunu incelemek ve bir olasılıkla bunu düzeltmek iyi bir fikir olabilir ama bunu şimdilik atlayacağız.

Veritabanınızı ve şemanızı oluşturma

Bu noktada EF'nin veritabanınızı oluşturmasını ve geçişten şemanızı oluşturmasını sağlayabilirsiniz. Bu işlem şu yollarla yapılabilir:

dotnet ef database update

Hepsi bu kadar; uygulamanız yeni veritabanınızda çalışmaya hazır ve tek bir SQL satırı bile yazmanız gerekmedi. Bu geçişleri uygulama yolunun yerel geliştirme için ideal olduğunu ama üretim ortamlarına fazla uygun olmadığını aklınızda bulundurun. Daha fazla bilgi için Geçişleri Uygulama sayfasına bakın.

Modelinizi geliştirme

Birkaç gün geçti ve bloglarınıza bir oluşturma zaman damgası eklemeniz istendi. Uygulamanızda gerekli değişiklikleri yaptınız ve modeliniz şimdi şöyle görünüyor:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedTimestamp { get; set; }
}

Modelinizle üretim veritabanınız artık eşitlenmiş durumda değil; veritabanı şemanıza yeni bir sütun eklememiz gerekiyor. Şimdi bunun için yeni bir geçiş oluşturalım:

dotnet ef migrations add AddBlogCreatedTimestamp

Daha sonra proje geçmişini daha kolay anlayabilmek için geçişlere açıklayıcı bir ad verdiğimizi unutmayın.

Bu projenin ilk geçişi olmadığından, EF Core şimdi güncelleştirilmiş modelinizi sütun eklenmeden önceki eski modelin anlık görüntüsüyle karşılaştırıyor; model anlık görüntüsü, geçişi eklediğinizde EF Core tarafından oluşturulan ve kaynak denetimine iade edilen dosyalardan biridir. Bu karşılaştırmaya dayanarak EF Core bir sütun eklendiğini algılıyor ve uygun geçişi ekliyor.

Artık geçişinizi daha önce olduğu gibi uygulayabilirsiniz:

dotnet ef database update

Bu kez EF'nin veritabanının zaten mevcut olduğunu algıladığına dikkat edin. Bunun yanı sıra, yukarıda ilk geçişimiz uygulandığında bu olgu veritabanınızdaki özel geçişler geçmiş tablosuna kaydedildi. Bu sayede EF yalnızca yeni geçişi otomatik olarak uygulayabilir.

Modelinizin parçalarını dışlama

Bazen başka bir DbContext'teki türlere başvurmak isteyebilirsiniz. Bu, geçiş çakışmalarına yol açabilir. Bunu önlemek için, söz konusu türü DbContext'lerden birinin geçişlerinden dışlayın.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<IdentityUser>()
        .ToTable("AspNetUsers", t => t.ExcludeFromMigrations());
}

Sonraki adımlar

Yukarıda yalnızca geçişlerle ilgili kısa giriş bilgileri yer alır. Geçişleri yönetme, bunları uygulama ve diğer konular hakkında daha fazla bilgi edinmek için lütfen diğer belge sayfalarını gözden geçirin. Ayrıca .NET Core CLI araç başvurusu da farklı komutlarla ilgili yararlı bilgiler içerir

Ek kaynaklar