Geçişlere genel bakış

Gerçek dünyada projelerde veri modelleri, Özellikler uygulandıkça değişir: yeni varlıklar veya özellikler eklenir ve kaldırılır ve veritabanı şemaları uygulamayla eşitlenmiş şekilde değiştirilmeleri gerekir. EF Core geçiş özelliği, veritabanı şemasını, veritabanında var olan verileri korurken uygulamanın veri modeliyle eşitlenmiş halde tutmak için artımlı olarak güncellemek üzere bir yol sağlar.

Yüksek düzeyde geçişlerde, geçişleri aşağıdaki şekilde çalışır:

  • Veri modeli değişikliği tanıtıldığında, geliştirici, veritabanı şemasını eşitlenmiş halde tutmak için gerekli olan güncelleştirmeleri açıklayan ilgili bir geçiş eklemek için EF Core araçlarını kullanır. EF Core farkları ve geçiş kaynak dosyalarını oluşturan geçerli modeli eski modelin anlık görüntüsüne göre karşılaştırır; dosyalar, projenizin kaynak denetiminde başka bir kaynak dosya gibi izlenebilir.
  • Yeni bir geçiş üretildikten sonra, bir veritabanına çeşitli yollarla uygulanabilir. EF Core tüm uygulanmış geçişleri özel bir geçmiş tablosunda kaydeder ve bu, hangi geçişlerin uygulandığını ve hangilerinin uygulandığını bilmesini sağlar.

Bu sayfanın geri kalanı, geçişleri kullanmaya yönelik adım adım başlangıç kılavuzudur. Daha ayrıntılı bilgi edinmek için bu bölümdeki diğer sayfalara başvurun.

Başlarken

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

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

Geliştirme sırasında, hızlı bir şekilde yinelemek için oluşturma ve bırakma API 'lerini kullanmış olabilirsiniz; böylece modelinize gereken şekilde değişiklik yapabilirsiniz; Ancak artık uygulamanız üretime gittiğinin, tüm veritabanını bırakmadan şemayı güvenli bir şekilde geliştirmek için bir yol gerekir.

Araçları yükler

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

İlk geçişinizi oluşturma

Şimdi ilk geçişinizi eklemeye hazırsınız! EF Core ınitialcreateadlı bir geçiş oluşturmasını bildirin:

dotnet ef migrations add InitialCreate

EF Core, projenizde geçişler adlı bir dizin oluşturacak ve bazı dosyalar oluşturacak. Tam olarak EF Core üretilen ve muhtemelen onu ne kadar uygun olduğunu incelemek iyi bir fikirdir. ancak şimdilik bunu atlayacağız.

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

Bu noktada, veritabanınızı oluşturup geçişten şemayı oluşturabilirsiniz. Bu, aşağıdakiler kullanılarak yapılabilir:

dotnet ef database update

Bu, bu kadar çok şey var. uygulamanız yeni veritabanınızda çalıştırılmaya hazırlanıyor ve tek satırlık bir SQL yazmanız gerekmiyor. Geçişleri uygulamanın bu şekilde yerel geliştirme için ideal olduğunu, ancak üretim ortamları için daha az uygun olduğunu unutmayın. daha fazla bilgi için geçişleri uygulama sayfasına bakın.

Modelinizi gelişen

Birkaç gün geçti ve bloglara bir oluşturma zaman damgası eklemeniz isteniyor. Uygulamanızda gerekli değişiklikleri tamamladınız ve modeliniz şu şekilde görünür:

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

Modeliniz ve üretim Veritabanınız artık eşitlenmemiş. veritabanı şemanıza yeni bir sütun eklememiz gerekiyor. Bunun için yeni bir geçiş oluşturalım:

dotnet ef migrations add AddBlogCreatedTimestamp

Daha sonra proje geçmişini daha kolay anlamak için geçişlere açıklayıcı bir ad vermemiz gerektiğini unutmayın.

Projenin ilk geçişi olmadığından, EF Core artık güncelleştirilmiş modelinizi, sütun eklenmeden önce eski modelin anlık görüntüsüne göre karşılaştırır; Model anlık görüntüsü, bir geçiş eklediğiniz ve kaynak denetimine işaretlenmiş EF Core tarafından oluşturulan dosyalardan biridir. Bu karşılaştırmaya göre EF Core bir sütunun eklendiğini algılar ve uygun geçişi ekler.

Şimdi geçişinizi daha önce olarak uygulayabilirsiniz:

dotnet ef database update

Bu zamanın, EF veritabanının zaten var olduğunu algıladığını unutmayın. Ayrıca, ilk geçişimiz yukarıda uygulandığında, bu olgu veritabanınızdaki özel bir geçiş Geçmişi tablosuna kaydedilmiştir; Bu, EF 'in yalnızca yeni geçişi uygulamasına otomatik olarak uygulanmasını sağlar.

Modelinizin parçalarını dışlama

Not

Bu özellik EF Core 5,0 ' de tanıtılmıştı.

Bazen başka bir DbContext içindeki türlere başvurmak isteyebilirsiniz. Bu, geçiş çakışmalarına neden olabilir. Bunu engellemek için, türü Dbbağlamlarından birinin geçişlerden hariç tutun.

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

Sonraki adımlar

Yukarıdaki yalnızca geçişlere kısa bir giriş yapıldı. Geçişleri yönetme, bunları uygulamave diğer yönleri hakkında daha fazla bilgi edinmek için lütfen diğer belge sayfalarına bakın. .NET Core CLI araç başvurusu , farklı komutlarla ilgili yararlı bilgiler de içerir

Ek kaynaklar