Migracje Code FirstCode First Migrations

Migracje Code First jest zalecany sposób rozwijać schemat bazy danych aplikacji, jeśli używasz kodu pierwszego przepływu pracy.Code First Migrations is the recommended way to evolve your application's database schema if you are using the Code First workflow. Migracje udostępniają zestaw narzędzi, które umożliwiają:Migrations provide a set of tools that allow:

  1. Tworzenie początkowej bazy danych, która współdziała z modelu platformy EFCreate an initial database that works with your EF model
  2. Generowanie migracji, aby śledzić zmiany wprowadzone do modelu platformy EFGenerating migrations to keep track of changes you make to your EF model
  3. Bazy danych na bieżąco z tymi zmianamiKeep your database up to date with those changes

Następujące Instruktaż zapewnia przegląd migracje Code First platformy Entity Framework.The following walkthrough will provide an overview Code First Migrations in Entity Framework. Możesz ukończenia całego instruktażu lub od razu przejść do tematu, który Cię interesuje.You can either complete the entire walkthrough or skip to the topic you are interested in. Omówiono następujące tematy:The following topics are covered:

Tworzenie początkowej modelu i bazy danychBuilding an Initial Model & Database

Zanim zaczniemy, za pomocą migracji potrzebujemy projektu i model Code First chcesz pracować.Before we start using migrations we need a project and a Code First model to work with. W tym przewodniku są użyjemy canonical Blog i wpis modelu.For this walkthrough we are going to use the canonical Blog and Post model.

  • Utwórz nową MigrationsDemo aplikacji konsoliCreate a new MigrationsDemo Console application
  • Dodaj najnowszą wersję EntityFramework pakiet NuGet do projektuAdd the latest version of the EntityFramework NuGet package to the project
    • Narzędzia —> Menedżer pakietów biblioteki —> Konsola Menedżera pakietówTools –> Library Package Manager –> Package Manager Console
    • Uruchom EntityFramework instalacji pakietu poleceniaRun the Install-Package EntityFramework command
  • Dodaj Model.cs pliku z kodem, pokazano poniżej.Add a Model.cs file with the code shown below. Ten kod definiuje pojedynczy Blog klasę, która sprawia, że nasz model domeny i BlogContext klasę, która jest nasz kontekst EF Code FirstThis code defines a single Blog class that makes up our domain model and a BlogContext class that is our EF Code First context
    using System.Data.Entity;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity.Infrastructure;

    namespace MigrationsDemo
    {
        public class BlogContext : DbContext
        {
            public DbSet<Blog> Blogs { get; set; }
        }

        public class Blog
        {
            public int BlogId { get; set; }
            public string Name { get; set; }
        }
    }
  • Teraz, gdy model, nadszedł czas na jej używać do wykonywania dostęp do danych.Now that we have a model it’s time to use it to perform data access. Aktualizacja Program.cs pliku z kodem, pokazano poniżej.Update the Program.cs file with the code shown below.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace MigrationsDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var db = new BlogContext())
                {
                    db.Blogs.Add(new Blog { Name = "Another Blog " });
                    db.SaveChanges();

                    foreach (var blog in db.Blogs)
                    {
                        Console.WriteLine(blog.Name);
                    }
                }

                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
            }
        }
    }
  • Uruchom aplikację i zostanie wyświetlony MigrationsCodeDemo.BlogContext baza danych została utworzona dla Ciebie.Run your application and you will see that a MigrationsCodeDemo.BlogContext database is created for you.

    Bazy danych LocalDB

Włączanie migracjiEnabling Migrations

Nadszedł czas na pewnych zmian więcej w naszym modelu.It’s time to make some more changes to our model.

  • Umożliwia wprowadzenie właściwość adres Url do klasy blogu.Let’s introduce a Url property to the Blog class.
    public string Url { get; set; }

Jeśli zamierzasz uruchomić aplikację ponownie otrzymamy InvalidOperationException, podając modelu kopii kontekstu "BlogContext" została zmieniona od czasu utworzenia bazy danych. Należy rozważyć użycie migracje Code First w aktualizacji bazy danych ( http://go.microsoft.com/fwlink/?LinkId=238269 ).If you were to run the application again you would get an InvalidOperationException stating The model backing the 'BlogContext' context has changed since the database was created. Consider using Code First Migrations to update the database ( http://go.microsoft.com/fwlink/?LinkId=238269).

Jak sugeruje wyjątek, jest czas, aby rozpocząć korzystanie z migracje Code First.As the exception suggests, it’s time to start using Code First Migrations. Pierwszym krokiem jest włączanie funkcji migracje dla nasz kontekst.The first step is to enable migrations for our context.

  • Uruchom Enable-Migrations polecenia w konsoli Menedżera pakietówRun the Enable-Migrations command in Package Manager Console

    To polecenie został dodany migracje folderu do naszego projektu.This command has added a Migrations folder to our project. Ten nowy folder zawiera dwa pliki:This new folder contains two files:

  • Klasa konfiguracji.The Configuration class. Ta klasa pozwala skonfigurować sposób działania migracji w Twoim kontekście.This class allows you to configure how Migrations behaves for your context. W tym przewodniku po prostu używamy domyślnej konfiguracji.For this walkthrough we will just use the default configuration. Ponieważ istnieje tylko pojedynczy kontekst Code First w projekcie, Enable-Migrations jest wypełniane automatycznie typ kontekstu, którego dotyczy ta konfiguracja.Because there is just a single Code First context in your project, Enable-Migrations has automatically filled in the context type this configuration applies to.

  • Migracja InitialCreate.An InitialCreate migration. Ta migracja został wygenerowany, ponieważ już mieliśmy Code First utworzyć bazę danych, zanim umożliwiliśmy migracji.This migration was generated because we already had Code First create a database for us, before we enabled migrations. Kod w tej migracji szkieletu reprezentuje obiektów, które zostały już utworzone w bazie danych.The code in this scaffolded migration represents the objects that have already been created in the database. W tym przypadku, który jest Blog tabeli za pomocą BlogId i nazwa kolumn.In our case that is the Blog table with a BlogId and Name columns. Nazwa pliku zawiera sygnaturę czasową, aby pomóc w kolejności.The filename includes a timestamp to help with ordering. Jeśli baza danych nie został już utworzony tej migracji InitialCreate czy nie zostały dodane do projektu. Zamiast tego po raz pierwszy nazywamy migracji Dodaj kod, aby utworzyć te tabele będą szkieletu do nowej migracji.If the database had not already been created this InitialCreate migration would not have been added to the project. Instead, the first time we call Add-Migration the code to create these tables would be scaffolded to a new migration.

Wiele modeli przeznaczonych dla tej samej bazy danychMultiple Models Targeting the Same Database

W przypadku używania wersji przed EF6, tylko jeden model Code First może służyć do generowania/Zarządzanie schematami bazy danych.When using versions prior to EF6, only one Code First model could be used to generate/manage the schema of a database. Jest to wynikiem pojedynczej _ _MigrationsHistory tabeli na bazę danych w sposób identyfikowania zapisy, które należą do modelu.This is the result of a single __MigrationsHistory table per database with no way to identify which entries belong to which model.

Począwszy od platformy EF6, konfiguracji klasa zawiera elementu ContextKey właściwości.Starting with EF6, the Configuration class includes a ContextKey property. Jest to zabezpieczenie jako unikatowy identyfikator dla każdego modelu Code First.This acts as a unique identifier for each Code First model. W kolumnie _ _MigrationsHistory tabeli umożliwia wpisy z wielu modeli, aby udostępnić w tabeli.A corresponding column in the __MigrationsHistory table allows entries from multiple models to share the table. Ta właściwość jest domyślnie do w pełni kwalifikowanej nazwy kontekstu.By default, this property is set to the fully qualified name of your context.

Generowanie i uruchamianie migracjiGenerating & Running Migrations

Migracje Code First ma dwa podstawowe polecenia, które ma być zapoznanie się z.Code First Migrations has two primary commands that you are going to become familiar with.

  • Dodaj migracji będzie tworzenia szkieletu dalej migracji, w oparciu o zmiany wprowadzone do modelu od chwili utworzenia ostatniej migracjiAdd-Migration will scaffold the next migration based on changes you have made to your model since the last migration was created
  • Update-Database Zastosuj wszelkie oczekujące migracji do bazy danychUpdate-Database will apply any pending migrations to the database

Potrzebujemy do tworzenia szkieletu migracji, aby zadbać o nową właściwość adres Url, które dodaliśmy.We need to scaffold a migration to take care of the new Url property we have added. Migracji Dodaj polecenie umożliwia nam nazwij te migracji, po prostu nazwiemy naszych AddBlogUrl.The Add-Migration command allows us to give these migrations a name, let’s just call ours AddBlogUrl.

  • Uruchom AddBlogUrl migracji Dodaj polecenia w konsoli Menedżera pakietówRun the Add-Migration AddBlogUrl command in Package Manager Console
  • W migracje folderu w efekcie powstał nowy AddBlogUrl migracji.In the Migrations folder we now have a new AddBlogUrl migration. Filename migracji wstępnie ustalony z sygnaturą czasową pomagające w kolejnościThe migration filename is pre-fixed with a timestamp to help with ordering
    namespace MigrationsDemo.Migrations
    {
        using System;
        using System.Data.Entity.Migrations;

        public partial class AddBlogUrl : DbMigration
        {
            public override void Up()
            {
                AddColumn("dbo.Blogs", "Url", c => c.String());
            }

            public override void Down()
            {
                DropColumn("dbo.Blogs", "Url");
            }
        }
    }

Firma Microsoft, można teraz edytować lub dodać do tej migracji, ale wszystko wygląda dość dobrze.We could now edit or add to this migration but everything looks pretty good. Użyjmy Update-Database dotyczą tej migracji bazy danych.Let’s use Update-Database to apply this migration to the database.

  • Uruchom Update-Database polecenia w konsoli Menedżera pakietówRun the Update-Database command in Package Manager Console
  • Migracje Code First zostanie porównany migracji w naszym migracje folder z tymi, które zostały zastosowane do bazy danych.Code First Migrations will compare the migrations in our Migrations folder with the ones that have been applied to the database. Zostanie on wyświetlony AddBlogUrl migracji musi być zastosowane i uruchom go.It will see that the AddBlogUrl migration needs to be applied, and run it.

MigrationsDemo.BlogContext bazy danych został zaktualizowany do uwzględnienia adresu Url kolumny w blogi tabeli.The MigrationsDemo.BlogContext database is now updated to include the Url column in the Blogs table.

Dostosowywanie migracjiCustomizing Migrations

Do tej pory mamy już i uruchamianie migracji bez wprowadzania żadnych zmian.So far we’ve generated and run a migration without making any changes. Teraz Przyjrzyjmy się edycją kodu, który pobiera wygenerowany domyślnie.Now let’s look at editing the code that gets generated by default.

  • Nadszedł czas, aby wprowadzić pewne zmiany więcej w naszym modelu, możemy dodać nową ocena właściwości blogu klasyIt’s time to make some more changes to our model, let’s add a new Rating property to the Blog class
    public int Rating { get; set; }
  • Możemy również dodać nowy wpis klasyLet's also add a new Post class
    public class Post
    {
        public int PostId { get; set; }
        [MaxLength(200)]
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }
  • Dodamy również wpisy kolekcji Blog klasy w celu utworzenia drugiej stronie relacji między Blog i wpisWe'll also add a Posts collection to the Blog class to form the other end of the relationship between Blog and Post
    public virtual List<Post> Posts { get; set; }

Użyjemy migracji Dodaj polecenie, aby umożliwić migracje Code First tworzenia szkieletu jego najbardziej prawdopodobny wybór na migrację dla nas.We'll use the Add-Migration command to let Code First Migrations scaffold its best guess at the migration for us. Zamierzamy wywołania tej migracji AddPostClass.We’re going to call this migration AddPostClass.

  • Uruchom AddPostClass migracji Dodaj polecenia w konsoli Menedżera pakietów.Run the Add-Migration AddPostClass command in Package Manager Console.

Migracje Code First jak całkiem Niezłe rozwiązanie zadanie tworzenia szkieletów te zmiany, ale istnieje kilka kwestii, które firma Microsoft może wystąpić potrzeba zmiany:Code First Migrations did a pretty good job of scaffolding these changes, but there are some things we might want to change:

  1. Najpierw w górę, możemy dodać unikatowego indeksu Posts.Title kolumny (Dodawanie w wierszu 22 & 29 w poniższym kodzie).First up, let’s add a unique index to Posts.Title column (Adding in line 22 & 29 in the code below).
  2. Dodajemy również dopuszcza Blogs.Rating kolumny.We’re also adding a non-nullable Blogs.Rating column. W przypadku istniejących danych w tabeli zostaną zostaną przypisane domyślne CLR typu danych dla nowej kolumny (ocena jest liczba całkowita, tak byłoby 0).If there is any existing data in the table it will get assigned the CLR default of the data type for new column (Rating is integer, so that would be 0). Ale chcemy określić wartość domyślną 3 więc w istniejącym wiersze blogi tabeli rozpoczyna się od klasyfikacji znośnego.But we want to specify a default value of 3 so that existing rows in the Blogs table will start with a decent rating. (Wartość domyślna określona w wierszu 24 kod poniżej można znaleźć)(You can see the default value specified on line 24 of the code below)
    namespace MigrationsDemo.Migrations
    {
        using System;
        using System.Data.Entity.Migrations;

        public partial class AddPostClass : DbMigration
        {
            public override void Up()
            {
                CreateTable(
                    "dbo.Posts",
                    c => new
                        {
                            PostId = c.Int(nullable: false, identity: true),
                            Title = c.String(maxLength: 200),
                            Content = c.String(),
                            BlogId = c.Int(nullable: false),
                        })
                    .PrimaryKey(t => t.PostId)
                    .ForeignKey("dbo.Blogs", t => t.BlogId, cascadeDelete: true)
                    .Index(t => t.BlogId)
                    .Index(p => p.Title, unique: true);

                AddColumn("dbo.Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
            }

            public override void Down()
            {
                DropIndex("dbo.Posts", new[] { "Title" });
                DropIndex("dbo.Posts", new[] { "BlogId" });
                DropForeignKey("dbo.Posts", "BlogId", "dbo.Blogs");
                DropColumn("dbo.Blogs", "Rating");
                DropTable("dbo.Posts");
            }
        }
    }

Nasze edytowanych migracji jest gotowy do Przejdź, dlatego użyjemy Update-Database Aby przełączyć bazę danych aktualne.Our edited migration is ready to go, so let’s use Update-Database to bring the database up-to-date. Teraz możemy określić — pełne Flaga, dzięki czemu możesz zobaczyć SQL Server, który działa migracje Code First.This time let’s specify the –Verbose flag so that you can see the SQL that Code First Migrations is running.

  • Uruchom Update-Database — pełne polecenia w konsoli Menedżera pakietów.Run the Update-Database –Verbose command in Package Manager Console.

Ruchu danych niestandardowymi SQLData Motion / Custom SQL

Do tej pory mają przyjrzeliśmy się migracji, które operacje, które nie zmieniać i przenieść wszystkie dane teraz możemy przyjrzeć się coś wymagających przenoszenia niektórych danych.So far we have looked at migration operations that don’t change or move any data, now let’s look at something that needs to move some data around. Istnieje jeszcze nie natywną obsługę ruchu danych, ale niektóre dowolnych poleceń SQL w dowolnym momencie można uruchomić w naszego skryptu.There is no native support for data motion yet, but we can run some arbitrary SQL commands at any point in our script.

  • Dodajmy Post.Abstract właściwość nasz model.Let’s add a Post.Abstract property to our model. Później, będziemy do wstępnego wypełniania abstrakcyjne dla istniejących wpisów od początku przy użyciu jakiś tekst zawartości kolumny.Later, we’re going to pre-populate the Abstract for existing posts using some text from the start of the Content column.
    public string Abstract { get; set; }

Użyjemy migracji Dodaj polecenie, aby umożliwić migracje Code First tworzenia szkieletu jego najbardziej prawdopodobny wybór na migrację dla nas.We'll use the Add-Migration command to let Code First Migrations scaffold its best guess at the migration for us.

  • Uruchom AddPostAbstract migracji Dodaj polecenia w konsoli Menedżera pakietów.Run the Add-Migration AddPostAbstract command in Package Manager Console.
  • Wygenerowany migracji zajmie się zmiany schematu, ale chcemy również do wstępnego wypełniania abstrakcyjne kolumny przy użyciu 100 pierwszych znaków zawartości dla każdego wpisu.The generated migration takes care of the schema changes but we also want to pre-populate the Abstract column using the first 100 characters of content for each post. Możemy to zrobić przez rozwijanej opuszcza SQL i uruchamianie aktualizacji instrukcji po dodaniu kolumny.We can do this by dropping down to SQL and running an UPDATE statement after the column is added. (Dodanie w wierszu 12 w poniższym kodzie)(Adding in line 12 in the code below)
    namespace MigrationsDemo.Migrations
    {
        using System;
        using System.Data.Entity.Migrations;

        public partial class AddPostAbstract : DbMigration
        {
            public override void Up()
            {
                AddColumn("dbo.Posts", "Abstract", c => c.String());

                Sql("UPDATE dbo.Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL");
            }

            public override void Down()
            {
                DropColumn("dbo.Posts", "Abstract");
            }
        }
    }

Nasze edytowanych migracji jest dobra, dlatego użyjemy Update-Database Aby przełączyć bazę danych aktualne.Our edited migration is looking good, so let’s use Update-Database to bring the database up-to-date. Firma Microsoft będzie określić — pełne Flaga, dzięki czemu możemy zobaczyć SQL są uruchamiane w bazie danych.We’ll specify the –Verbose flag so that we can see the SQL being run against the database.

  • Uruchom Update-Database — pełne polecenia w konsoli Menedżera pakietów.Run the Update-Database –Verbose command in Package Manager Console.

Migrowanie do określonej wersji (w tym obniżenia poziomu)Migrate to a Specific Version (Including Downgrade)

Do tej pory zawsze uaktualniliśmy do najnowszych migracji, ale mogą zaistnieć sytuacje, kiedy zechcesz, uaktualnianie i obniżanie wersji do migracji.So far we have always upgraded to the latest migration, but there may be times when you want upgrade/downgrade to a specific migration.

Załóżmy, że chcemy przeprowadzić migrację naszych bazy danych do stanu sprzed po uruchomieniu naszych AddBlogUrl migracji.Let’s say we want to migrate our database to the state it was in after running our AddBlogUrl migration. Możemy użyć — TargetMigration przełącznika na starszą wersję tej migracji.We can use the –TargetMigration switch to downgrade to this migration.

  • Uruchom Update-Database-TargetMigration: AddBlogUrl polecenia w konsoli Menedżera pakietów.Run the Update-Database –TargetMigration: AddBlogUrl command in Package Manager Console.

To polecenie uruchomi skrypt w dół dla naszych AddBlogAbstract i AddPostClass migracji.This command will run the Down script for our AddBlogAbstract and AddPostClass migrations.

Jeśli chcesz przeprowadzić wdrożenie aż z powrotem do pustej bazy danych, wówczas można użyć Update-Database-TargetMigration: $InitialDatabase polecenia.If you want to roll all the way back to an empty database then you can use the Update-Database –TargetMigration: $InitialDatabase command.

Pobieranie skryptu SQLGetting a SQL Script

Jeśli inny Deweloper chce tych zmian na swoich maszynach one po prostu synchronizacji po sprawdzenie zmian w systemie kontroli źródła.If another developer wants these changes on their machine they can just sync once we check our changes into source control. Po naszej nowej migracji one po prostu uruchomić polecenie Update-Database, aby zmiany zastosowana lokalnie.Once they have our new migrations they can just run the Update-Database command to have the changes applied locally. Jednak jeśli chcemy wdrożyć tych zmian na serwerze testowym i po pewnym czasie produkcji, prawdopodobnie chcemy skrypt SQL, które firma Microsoft może przekazują do naszych DBA.However if we want to push these changes out to a test server, and eventually production, we probably want a SQL script we can hand off to our DBA.

  • Uruchom Update-Database polecenia, ale tym razem określ — skrypt Flaga tak, aby zmiany są zapisywane do skryptu zamiast stosowane.Run the Update-Database command but this time specify the –Script flag so that changes are written to a script rather than applied. Firma Microsoft będzie również określić źródło i cel migracji można wygenerować skryptu dla.We’ll also specify a source and target migration to generate the script for. Chcemy, aby skrypt, aby przejść od pustej bazy danych ($InitialDatabase) do najnowszej wersji (migracja AddPostAbstract).We want a script to go from an empty database ($InitialDatabase) to the latest version (migration AddPostAbstract). Jeśli nie określisz migracji docelowego migracji użyje najnowszych migracji jako element docelowy. Jeśli nie określisz migracje źródła migracje użyje bieżący stan bazy danych.If you don’t specify a target migration, Migrations will use the latest migration as the target. If you don't specify a source migrations, Migrations will use the current state of the database.
  • Uruchom Update-Database-Script - SourceMigration: $InitialDatabase - TargetMigration: AddPostAbstract polecenia w konsoli Menedżera pakietówRun the Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: AddPostAbstract command in Package Manager Console

Migracje Code First uruchomi proces migracji, ale zamiast faktycznie stosowania zmian go będzie zapisać je do pliku SQL dla Ciebie.Code First Migrations will run the migration pipeline but instead of actually applying the changes it will write them out to a .sql file for you. Wygenerowany skrypt jest otwierany automatycznie w programie Visual Studio gotowe wyświetlić lub zapisać.Once the script is generated, it is opened for you in Visual Studio, ready for you to view or save.

Generowanie skryptów IdempotentneGenerating Idempotent Scripts

Począwszy od platformy EF6, jeśli określisz — SourceMigration $InitialDatabase wygenerowany skrypt będzie "idempotentne".Starting with EF6, if you specify –SourceMigration $InitialDatabase then the generated script will be ‘idempotent’. Skrypty Idempotentne można uaktualnić bazy danych obecnie w dowolnej wersji do najnowszej wersji (lub określonej wersji, jeśli używasz — TargetMigration).Idempotent scripts can upgrade a database currently at any version to the latest version (or the specified version if you use –TargetMigration). Wygenerowany skrypt zawiera logikę do sprawdzenia _ _MigrationsHistory tabeli i tylko zastosować zmiany, które nie zostały zastosowane wcześniej.The generated script includes logic to check the __MigrationsHistory table and only apply changes that haven't been previously applied.

Automatycznie uaktualnianie przy uruchamianiu aplikacji (inicjatorze MigrateDatabaseToLatestVersion)Automatically Upgrading on Application Startup (MigrateDatabaseToLatestVersion Initializer)

Jeśli aplikacja jest wdrażana można ją automatycznie uaktualnić bazy danych (stosując wszystkie oczekujące migracje) po uruchomieniu aplikacji.If you are deploying your application you may want it to automatically upgrade the database (by applying any pending migrations) when the application launches. Można to zrobić, rejestrując MigrateDatabaseToLatestVersion inicjatora bazy danych.You can do this by registering the MigrateDatabaseToLatestVersion database initializer. Inicjator bazy danych zawiera po prostu logikę, który służy do upewnij się, że baza danych jest prawidłowo skonfigurowana.A database initializer simply contains some logic that is used to make sure the database is setup correctly. Logika jest uruchamiany po raz pierwszy kontekstu jest używana w ramach procesu aplikacji (AppDomain).This logic is run the first time the context is used within the application process (AppDomain).

Firma Microsoft może aktualizować Program.cs pliku, jak pokazano poniżej, aby ustawić MigrateDatabaseToLatestVersion inicjator dla BlogContext, zanim użyjemy kontekstu (wiersz 14).We can update the Program.cs file, as shown below, to set the MigrateDatabaseToLatestVersion initializer for BlogContext before we use the context (Line 14). Należy pamiętać, że trzeba będzie również dodać za pomocą instrukcji for System.Data.Entity przestrzeni nazw (wiersz 5).Note that you also need to add a using statement for the System.Data.Entity namespace (Line 5).

Kiedy tworzymy wystąpienie tego inicjatora, należy określić typ kontekstu (BlogContext) i konfiguracji migracji (konfiguracji) — Konfiguracja migracji jest klasa, która otrzymała dodany do naszych migracje folderu podczas umożliwiliśmy migracji.When we create an instance of this initializer we need to specify the context type (BlogContext) and the migrations configuration (Configuration) - the migrations configuration is the class that got added to our Migrations folder when we enabled Migrations.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Entity;
    using MigrationsDemo.Migrations;

    namespace MigrationsDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<BlogContext, Configuration>());

                using (var db = new BlogContext())
                {
                    db.Blogs.Add(new Blog { Name = "Another Blog " });
                    db.SaveChanges();

                    foreach (var blog in db.Blogs)
                    {
                        Console.WriteLine(blog.Name);
                    }
                }

                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
            }
        }
    }

Teraz zawsze, gdy nasze działania aplikacji, najpierw będzie sprawdzał, jeśli baza danych jego celem jest element jest aktualny i Zastosuj wszelkie oczekujące migracji, jeśli nie jest.Now whenever our application runs it will first check if the database it is targeting is up-to-date, and apply any pending migrations if it is not.