MigracjeMigrations

Model danych zmienia się podczas tworzenia i jest niezsynchronizowana z bazą danych.A data model changes during development and gets out of sync with the database. Można porzucić bazy danych i umożliwić EF, Utwórz nową, który odpowiada modelu, ale ta procedura powoduje utratę danych.You can drop the database and let EF create a new one that matches the model, but this procedure results in the loss of data. Funkcja migracji w programie EF Core umożliwia przyrostowe Aktualizowanie schematu bazy danych, aby zachować synchronizację z modelem danych aplikacji przy jednoczesnym zachowaniu istniejących danych w bazie danych.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.

Migracja obejmuje narzędzia wiersza polecenia i interfejsów API za pomocą następujących zadań:Migrations includes command-line tools and APIs that help with the following tasks:

Instalowanie narzędziInstall the tools

Zainstaluj narzędzia wiersza polecenia:Install the command-line tools:

Utwórz migracjiCreate a migration

Po zdefiniowany model początkowej, nadszedł czas, aby utworzyć bazę danych.After you've defined your initial model, it's time to create the database. Aby dodać początkowej migracji, uruchom następujące polecenie.To add an initial migration, run the following command.

Add-Migration InitialCreate
dotnet ef migrations add InitialCreate

Trzy pliki są dodawane do projektu w obszarze migracje katalogu:Three files are added to your project under the Migrations directory:

  • 00000000000000_InitialCreate.cs— plik główny migracji.00000000000000_InitialCreate.cs--The main migrations file. Zawiera operacje wymagane do zastosowania migracji (w Up()) i można go przywrócić (w Down()).Contains the operations necessary to apply the migration (in Up()) and to revert it (in Down()).
  • 00000000000000_InitialCreate.Designer.cs— plik metadanych migracji.00000000000000_InitialCreate.Designer.cs--The migrations metadata file. Zawiera informacje używane przez EF.Contains information used by EF.
  • MyContextModelSnapshot.cs--migawkę bieżącego modelu.MyContextModelSnapshot.cs--A snapshot of your current model. Używane do ustalenia, co zmienione podczas dodawania dalej migracji.Used to determine what changed when adding the next migration.

Sygnatura czasowa w nazwie pliku pomaga im uporządkowane chronologicznie, tak aby był widoczny postęp zmiany.The timestamp in the filename helps keep them ordered chronologically so you can see the progression of changes.

Porada

Mogą przenieść pliki migracji i zmieniać ich nazw.You are free to move Migrations files and change their namespace. Nowe migracje są tworzone jako elementy równorzędne ostatniej migracji.New migrations are created as siblings of the last migration.

Aktualizowanie bazy danychUpdate the database

Następnie Zastosuj migrację do bazy danych w celu utworzenia schematu.Next, apply the migration to the database to create the schema.

Update-Database
dotnet ef database update

Dostosowywanie kodu migracjiCustomize migration code

Po wprowadzeniu zmian do modelu platformy EF Core, schemat bazy danych może nie być zsynchronizowany. Aby przywrócić je na bieżąco, Dodaj inna migracja.After making changes to your EF Core model, the database schema might be out of sync. To bring it up to date, add another migration. Nazwa migracji mogą być używane jak wiadomość dotyczącą zatwierdzenia, w systemie kontroli wersji.The migration name can be used like a commit message in a version control system. Na przykład, możesz wybrać nazwę, takich jak AddProductReviews Jeśli ta zmiana jest nową klasę jednostki, aby.For example, you might choose a name like AddProductReviews if the change is a new entity class for reviews.

Add-Migration AddProductReviews
dotnet ef migrations add AddProductReviews

Po migracji szkieletu (kod generowany dla niego), przejrzyj kod dokładności i dodać, usunąć lub zmodyfikować dowolne operacje wymagane do zastosowania je poprawnie.Once the migration is scaffolded (code generated for it), review the code for accuracy and add, remove or modify any operations required to apply it correctly.

Na przykład migracja może zawierać następujące operacje:For example, a migration might contain the following operations:

migrationBuilder.DropColumn(
    name: "FirstName",
    table: "Customer");

migrationBuilder.DropColumn(
    name: "LastName",
    table: "Customer");

migrationBuilder.AddColumn<string>(
    name: "Name",
    table: "Customer",
    nullable: true);

Chociaż te operacje zapewnić zgodność schematu bazy danych, nie przechowują nazwy istniejących klientów.While these operations make the database schema compatible, they don't preserve the existing customer names. Ją ulepszyć, przepisać go tak, jak pokazano poniżej.To make it better, rewrite it as follows.

migrationBuilder.AddColumn<string>(
    name: "Name",
    table: "Customer",
    nullable: true);

migrationBuilder.Sql(
@"
    UPDATE Customer
    SET Name = FirstName + ' ' + LastName;
");

migrationBuilder.DropColumn(
    name: "FirstName",
    table: "Customer");

migrationBuilder.DropColumn(
    name: "LastName",
    table: "Customer");

Porada

Proces tworzenia szkieletów migracji ostrzega, gdy operacja może spowodować utratę danych (np. porzucenie kolumny).The migration scaffolding process warns when an operation might result in data loss (like dropping a column). Jeśli widzisz tego ostrzeżenia, należy szczególnie przejrzeć kod migracje dokładności.If you see that warning, be especially sure to review the migrations code for accuracy.

Zastosuj migrację do bazy danych za pomocą odpowiedniego polecenia.Apply the migration to the database using the appropriate command.

Update-Database
dotnet ef database update

Pusty migracjiEmpty migrations

Czasami przydatne jest dodać migrację bez wprowadzania żadnych zmian w modelu.Sometimes it's useful to add a migration without making any model changes. W przypadku dodawania nowej migracji tworzy pliki kodu z puste klasy.In this case, adding a new migration creates code files with empty classes. Można dostosować tej migracji, aby wykonywać operacje, które bezpośrednio nie odnoszą się do modelu platformy EF Core.You can customize this migration to perform operations that don't directly relate to the EF Core model. Jest kilka rzeczy, które można zmienić, aby zarządzać w ten sposób:Some things you might want to manage this way are:

  • Wyszukiwanie pełnotekstoweFull-Text Search
  • FunkcjeFunctions
  • Procedury składowaneStored procedures
  • WyzwalaczeTriggers
  • WidokiViews

Usuń migracjęRemove a migration

Czasami Dodaj migrację i należy pamiętać, że należy wprowadzić dodatkowe zmiany w modelu platformy EF Core, zanim zostaną one zastosowane.Sometimes you add a migration and realize you need to make additional changes to your EF Core model before applying it. Aby usunąć ostatniego migracji, użyj tego polecenia.To remove the last migration, use this command.

Remove-Migration
dotnet ef migrations remove

Po usunięciu migracji, można wprowadzić zmiany modelu dodatkowe i dodaj go ponownie.After removing the migration, you can make the additional model changes and add it again.

Przywróć migracjiRevert a migration

Jeśli migracji (lub kilka migracje) już zastosowane do bazy danych, ale trzeba przywrócić ją, można użyć tego samego polecenia zastosowania migracji, ale określ nazwę migracji, które chcesz przywrócić.If you already applied a migration (or several migrations) to the database but need to revert it, you can use the same command to apply migrations, but specify the name of the migration you want to roll back to.

Update-Database LastGoodMigration
dotnet ef database update LastGoodMigration

Generuj skrypty SQLGenerate SQL scripts

Podczas debugowania migracji lub ich wdrożeniem w produkcyjnej bazie danych, jest przydatne, można wygenerować skryptu SQL.When debugging your migrations or deploying them to a production database, it's useful to generate a SQL script. Skrypt można być dodatkowo zweryfikowane pod kątem dokładności i dopasowane do potrzeb produkcyjnej bazy danych.The script can then be further reviewed for accuracy and tuned to fit the needs of a production database. Skrypt można również w połączeniu z technologią wdrożenia.The script can also be used in conjunction with a deployment technology. Podstawowe polecenia jest następująca.The basic command is as follows.

Script-Migration
dotnet ef migrations script

Dostępnych jest kilka opcji tego polecenia.There are several options to this command.

z migracji należy ostatniej migracji, które są stosowane do bazy danych przed uruchomieniem skryptu.The from migration should be the last migration applied to the database before running the script. Jeśli migracja nie zostały zastosowane, należy określić 0 (jest to wartość domyślna).If no migrations have been applied, specify 0 (this is the default).

Do migracji jest ostatni migracji, która zostanie zastosowana do bazy danych po uruchomieniu skryptu.The to migration is the last migration that will be applied to the database after running the script. Domyślnie do ostatniego migracji w projekcie.This defaults to the last migration in your project.

Idempotentne Opcjonalnie można wygenerować skryptu.An idempotent script can optionally be generated. Ten skrypt tylko w przypadku migracji nie zostały jeszcze zastosowane do bazy danych.This script only applies migrations if they haven't already been applied to the database. Jest to przydatne, jeśli nie dokładnie wiesz ostatniej migracji zastosowana do bazy danych zostało lub jeśli są wdrażane do wielu baz danych, które mogą znajdować się w różnych migracji.This is useful if you don't exactly know what the last migration applied to the database was or if you are deploying to multiple databases that may each be at a different migration.

Zastosuj migracji w czasie wykonywaniaApply migrations at runtime

Niektóre aplikacje mogą chcieć zastosować migracji w czasie wykonywania podczas uruchamiania lub pierwszego uruchomienia.Some apps may want to apply migrations at runtime during startup or first run. To zrobić za pomocą Migrate() metody.Do this using the Migrate() method.

Ta metoda tworzy się w górnej części IMigrator usługa, która może służyć do bardziej zaawansowanych scenariuszy.This method builds on top of the IMigrator service, which can be used for more advanced scenarios. Użyj DbContext.GetService<IMigrator>() do niego dostęp.Use DbContext.GetService<IMigrator>() to access it.

myDbContext.Database.Migrate();

Ostrzeżenie

  • Ta metoda nie jest dla wszystkich użytkowników.This approach isn't for everyone. Chociaż jest to doskonałe rozwiązanie dla aplikacji przy użyciu lokalnej bazy danych, większość aplikacji będzie wymagać bardziej niezawodne strategię wdrażania, takie jak Generowanie skryptów SQL.While it's great for apps with a local database, most applications will require more robust deployment strategy like generating SQL scripts.
  • Nie wywołuj EnsureCreated() przed Migrate().Don't call EnsureCreated() before Migrate(). EnsureCreated() Pomija migracji w celu utworzenia schematu, co powoduje, że Migrate() nie powiedzie się.EnsureCreated() bypasses Migrations to create the schema, which causes Migrate() to fail.

Następne krokiNext steps

Aby uzyskać więcej informacji, zobacz Entity Framework Core odnoszą się narzędzia — EF Core.For more information, see Entity Framework Core odnoszą się narzędzia — EF Core.