Geçişlere genel bakışMigrations Overview

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ının uygulamayla eşitlenmiş şekilde tutulması gerekir.In real world projects, data models change as features get implemented: new entities or properties are added and removed, and database schemas needs to be changed accordingly to be kept in sync with the application. 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.The migrations feature in EF Core provides a way to incrementally update the database schema to keep it in sync with the application's data model while preserving existing data in the database.

Yüksek düzeyde geçişlerde, geçişleri aşağıdaki şekilde çalışır:At a high level, migrations function in the following way:

  • 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.When a data model change is introduced, the developer uses EF Core tools to add a corresponding migration describing the updates necessary to keep the database schema in sync. EF Core compares the current model against a snapshot of the old model to determine the differences, and generates migration source files; the files can be tracked in your project's source control like any other source file.
  • Yeni bir geçiş üretildikten sonra, bir veritabanına çeşitli yollarla uygulanabilir.Once a new migration has been generated, it can be applied to a database in various ways. 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.EF Core records all applied migrations in a special history table, allowing it to know which migrations have been applied and which haven't.

Bu sayfanın geri kalanı, geçişleri kullanmaya yönelik adım adım başlangıç kılavuzudur.The rest of this page is a step-by-step beginner's guide for using migrations. Daha ayrıntılı bilgi edinmek için bu bölümdeki diğer sayfalara başvurun.Consult the other pages in this section for more in-depth information.

BaşlarkenGetting started

Aşağıdaki basit modeli içeren ilk EF Core uygulamanızı tamamladığınız anlamına olalım:Let's assume you've just completed your first EF Core application, which contains the following simple model:

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.During development, you may have used the Create and Drop APIs to iterate quickly, changing your model as needed; but now that your application is going to production, you need a way to safely evolve the schema without dropping the entire database.

Araçları yüklerInstall the tools

İlk olarak, EF Core komut satırı araçlarınıyüklemeniz gerekir:First, you'll have to install the EF Core command-line tools:

İlk geçişinizi oluşturmaCreate your first migration

Şimdi ilk geçişinizi eklemeye hazırsınız!You're now ready to add your first migration! EF Core ınitialcreateadlı bir geçiş oluşturmasını bildirin:Instruct EF Core to create a migration named InitialCreate:

dotnet ef migrations add InitialCreate

EF Core, projenizde geçişler adlı bir dizin oluşturacak ve bazı dosyalar oluşturacak.EF Core will create a directory called Migrations in your project, and generate some files. Tam olarak EF Core üretilen ve muhtemelen onu ne kadar uygun olduğunu incelemek iyi bir fikirdir. ancak şimdilik bunu atlayacağız.It's a good idea to inspect what exactly EF Core generated - and possibly amend it - but we'll skip over that for now.

Veritabanınızı ve şemayı oluşturmaCreate your database and schema

Bu noktada, veritabanınızı oluşturup geçişten şemayı oluşturabilirsiniz.At this point you can have EF create your database and create your schema from the migration. Bu, aşağıdakiler kullanılarak yapılabilir:This can be done via the following:

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.That's all there is to it - your application is ready to run on your new database, and you didn't need to write a single line of SQL. 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.Note that this way of applying migrations is ideal for local development, but is less suitable for production environments - see the Applying Migrations page for more info.

Modelinizi gelişenEvolving your model

Birkaç gün geçti ve bloglara bir oluşturma zaman damgası eklemeniz isteniyor.A few days have passed, and you're asked to add a creation timestamp to your blogs. Uygulamanızda gerekli değişiklikleri tamamladınız ve modeliniz şu şekilde görünür:You've done the necessary changes to your application, and your model now looks like this:

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.Your model and your production database are now out of sync - we must add a new column to your database schema. Bunun için yeni bir geçiş oluşturalım:Let's create a new migration for this:

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.Note that we give migrations a descriptive name, to make it easier to understand the project history later.

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.Since this isn't the project's first migration, EF Core now compares your updated model against a snapshot of the old model, before the column was added; the model snapshot is one of the files generated by EF Core when you add a migration, and is checked into source control. Bu karşılaştırmaya göre EF Core bir sütunun eklendiğini algılar ve uygun geçişi ekler.Based on that comparison, EF Core detects that a column has been added, and adds the appropriate migration.

Şimdi geçişinizi daha önce olarak uygulayabilirsiniz:You can now apply your migration as before:

dotnet ef database update

Bu zamanın, EF veritabanının zaten var olduğunu algıladığını unutmayın.Note that this time, EF detects that the database already exists. 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.In addition, when our first migration was applied above, this fact was recorded in a special migrations history table in your database; this allows EF to automatically apply only the new migration.

Sonraki adımlarNext steps

Yukarıdaki yalnızca geçişlere kısa bir giriş yapıldı.The above was only a brief introduction to migrations. 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.Please consult the other documentation pages to learn more about managing migrations, applying them, and other aspects. .NET Core CLI araç başvurusu , farklı komutlarla ilgili yararlı bilgiler de içerirThe .NET Core CLI tool reference also contains useful information on the different commands