Automatikus kód első migrálása

Az automatikus migrálások lehetővé teszik a Code First Migrations használatát anélkül, hogy minden módosításhoz kódfájlt kellene használnia a projektben. Nem minden módosítás alkalmazható automatikusan – például az oszlop átnevezéséhez kódalapú migrálásra van szükség.

Megjegyzés:

Ez a cikk feltételezi, hogy tudja, hogyan használhatja a Code First Migrationst az alapforgatókönyvekben. Ha nem, akkor a folytatás előtt el kell olvasnia a Code First Migrationst .

Javaslat csapatkörnyezetekhez

Automatikus és kódalapú áttelepítéseket is végezhet, de ez csapatfejlesztési forgatókönyvekben nem ajánlott. Ha ön egy forrásvezérlést használó fejlesztői csapat tagja, akkor vagy tisztán automatikus migrálást vagy tisztán kódalapú migrálást kell használnia. Az automatikus migrálás korlátai miatt javasoljuk, hogy kódalapú migrálásokat használjunk csapatkörnyezetekben.

Kezdeti modell és adatbázis létrehozása

A migrálások használatba vétele előtt egy projektre és egy Code First modellre van szükség a használathoz. Ehhez az útmutatóhoz a canonical Blog and Post modellt fogjuk használni.

  • Új MigrationsAutomaticDemo konzolalkalmazás létrehozása
  • Adja hozzá az EntityFramework NuGet-csomag legújabb verzióját a projekthez
    • Eszközök –> Könyvtárcsomag-kezelő –> Csomagkezelő konzol
    • Az Install-Package EntityFramework parancs futtatása
  • Adjon hozzá egy Model.cs fájlt az alábbi kóddal. Ez a kód egyetlen blogosztályt határoz meg, amely a tartománymodellt és egy BlogContext osztályt határoz meg, amely az EF Code First-környezetünk.
    using System.Data.Entity;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity.Infrastructure;

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

        public class Blog
        {
            public int BlogId { get; set; }
            public string Name { get; set; }
        }
    }
  • Most, hogy rendelkezünk egy modellel, itt az ideje, hogy adathozzáférést hajtsunk végre. Frissítse a Program.cs fájlt az alábbi kóddal.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace MigrationsAutomaticDemo
    {
        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();
            }
        }
    }
  • Ha futtatja az alkalmazást, látni fogja, hogy létrejön egy MigrationsAutomaticCodeDemo.BlogContext adatbázis.

    Database LocalDB

Áttelepítések engedélyezése

Itt az ideje, hogy további módosításokat hajtsunk végre a modellen.

  • Lássunk be egy URL-tulajdonságot a Blog osztályba.
    public string Url { get; set; }

Ha ismét futtatni szeretné az alkalmazást, egy InvalidOperationException hibaüzenetet kap, amely szerint a "BlogContext" környezet hátterében lévő modell megváltozott az adatbázis létrehozása óta. Fontolja meg a Code First Migrations használatát az adatbázis (http://go.microsoft.com/fwlink/?LinkId=238269) frissítéséhez.

Ahogy a kivétel is sugallja, ideje elkezdeni a Code First Migrations használatát. Mivel automatikus migrálásokat szeretnénk használni, meg fogjuk adni a –EnableAutomaticMigrations kapcsolót.

  • Futtassa a Enable-Migrations –EnableAutomaticMigrations parancsot a Package Manager konzolon Ez a parancs hozzáadta a migrálási mappát a projekthez. Ez az új mappa egy fájlt tartalmaz:

  • A Konfiguráció osztály. Ez az osztály lehetővé teszi a migrálások viselkedésének konfigurálását a környezethez. Ehhez az útmutatóhoz csak az alapértelmezett konfigurációt fogjuk használni. Mivel a projektben csak egyetlen Code First környezet található, Enable-Migrations automatikusan kitöltötte azt a környezettípust, amelyre ez a konfiguráció vonatkozik.

 

Az első automatikus migrálás

A Code First Migrations két elsődleges parancsot tartalmaz, amelyeket ismerni fog.

  • A bővítménymigrálás a következő migrálást fogja összehozni a modell legutóbbi létrehozása óta végrehajtott módosítások alapján
  • Az Update-Database minden függőben lévő migrálást alkalmaz az adatbázisra

Elkerüljük a Add-Migration használatát (hacsak nem igazán szükséges), és arra összpontosítunk, hogy a Code First Migrations automatikusan kiszámítsa és alkalmazza a módosításokat. Használjuk az Update-Database-t a Code First Migrations lekéréséhez, hogy leküldjük a módosításokat a modellünkbe (az új Blog.Url tulajdonságba) az adatbázisba.

  • Futtassa az Update-Database parancsot a Package Manager konzolon.

A MigrationsAutomaticDemo.BlogContext adatbázis most frissült, hogy az URL-oszlopot is belefoglalja a Blogok táblába.

 

A második automatikus migrálás

Hajtsunk végre egy újabb módosítást, és hagyjuk, hogy a Code First Migrations automatikusan küldje el nekünk a módosításokat az adatbázisba.

  • Adjunk hozzá egy új Post osztályt is
    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; }
    }
  • Egy Bejegyzésgyűjteményt is hozzáadunk a Blog osztályhoz, hogy a Blog és a Post közötti kapcsolat másik végét képezzük
    public virtual List<Post> Posts { get; set; }

Most az Update-Database parancs használatával hozza naprakészre az adatbázist. Ezúttal adja meg a –Verbose kapcsolót, hogy láthassa a Code First Migrations által futtatott SQL-parancsokat.

  • Futtassa az Update-Database –Verbose parancsot a Package Manager Konzolon.

Kódalapú migrálás hozzáadása

Most tekintsünk meg valamit, amelyhez kódalapú migrálást szeretnénk használni.

  • Adjunk hozzá minősítési tulajdonságot a blogosztályhoz
    public int Rating { get; set; }

Az Update-Database futtatásával leküldhetjük ezeket a módosításokat az adatbázisba. Azonban hozzáadunk egy nem null értékű Blogs.Rating oszlopot, ha a táblában vannak meglévő adatok, akkor az új oszlop adattípusának CLR-alapértelmezett értéke lesz hozzárendelve (az értékelés egész szám, tehát 0). De meg szeretnénk adni egy alapértelmezett 3 értéket, hogy a Blogok tábla meglévő sorai tisztességes értékeléssel kezdődjenek. Használjuk a Add-Migration parancsot a módosítás kódalapú migrálásra való írásához, hogy szerkeszthessük. A Add-Migration paranccsal nevet adhatunk ezeknek a migrációknak; nevezzük a miénket AddBlogRating-nek.

  • Futtassa a Add-Migration AddBlogRating parancsot a Package Manager-konzolon.
  • A Migrálások mappában most már van egy új AddBlogRating migrálás . A migrálási fájlnév egy időbélyeggel van előtagolva a rendezés elősegítése érdekében. Szerkessze a létrehozott kódot a Blog.Rating alapértelmezett 3-as értékének megadásához (az alábbi kód 10. sora)

Az áttelepítés egy kód mögötti fájllal is rendelkezik, amely bizonyos metaadatokat rögzít. Ez a metaadatok lehetővé teszik, hogy a Code First Migrations replikálja a kódalapú migrálás előtt végrehajtott automatikus migrálásokat. Ez akkor fontos, ha egy másik fejlesztő futtatni szeretné a migrálásokat, vagy ha ideje üzembe helyezni az alkalmazást.

    namespace MigrationsAutomaticDemo.Migrations
    {
        using System;
        using System.Data.Entity.Migrations;

        public partial class AddBlogRating : DbMigration
        {
            public override void Up()
            {
                AddColumn("Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
            }

            public override void Down()
            {
                DropColumn("Blogs", "Rating");
            }
        }
    }

A módosított migráció jól néz ki, ezért használjuk az Update-Database parancsot az adatbázis naprakésszé tételéhez.

  • Futtassa az Update-Database parancsot a Package Manager konzolon.

Vissza az automatikus migráláshoz

Most már szabadon válthatunk automatikus migrálásra az egyszerűbb módosításokhoz. A Code First Migrations gondoskodik az automatikus és kódalapú migrálások megfelelő sorrendben történő végrehajtásáról az egyes kódalapú áttelepítések kód mögötti fájljában tárolt metaadatok alapján.

  • Adjunk hozzá egy Post.Abstract tulajdonságot a modellhez
    public string Abstract { get; set; }

Most már az Update-Database használatával lekérhetjük a Code First Migrationst, hogy automatikus migrálással leküldjük ezt a módosítást az adatbázisba.

  • Futtassa az Update-Database parancsot a Package Manager konzolon.

Összefoglalás

Ebben az útmutatóban azt láthatta, hogyan küldheti le a modell módosításait az adatbázisba automatikus migrálással. Azt is láthatta, hogyan hozhat létre és futtathat kódalapú migrálásokat az automatikus migrálások között, ha nagyobb kontrollra van szüksége.