A fejlesztés és a hatékonyság a kód első vándorlások szervezet keretében 4

A képen az uralkodó pillangó migráció (CC BY-NC-ND 2.0 originalzdes).

Ebben a cikkben, én szempontból, persze, válaszolni a kérdésekre, példák támasztják alá:

  • Mi a migráció és mire valók?
  • Ami érdekes ebben a kiadásban, és az EF Kód Első Migrations általában?

Azt hiszem, szinte senki sem használja a migráció a mindennapi kereskedelmi fejlesztés. Tehát nem fogok kifejezetten hozzárendel egy lista az új funkciók és csak beszélni a migráció, kiemelve külön az új EF 4.3 Beta 1.

By the way, talán érdekelni fogja, hogy a kibocsátás EF 4.3 tervezik az első negyedévben. Az egyetlen Kár, hogy a kibocsátás EF 5.0 támogatással enum és optimalizálja a sebességet mindannyian várnak hamarosan - a kiadás a .NET 4.5 csak akkor EF 5.0 Beta 1.

Rövid leírása kioldódott

Migrációs EF célja, hogy foglalkozzon az adatbázisban változtatásokat szerkezet alakulása az alkalmazást. Az egyik megoldás erre a problémára, adtam hangot korábban a cikkben: „Principles of SQL - DDL és adatbázis újratervezés”. Remélem, hogy amikor készen áll EF Kód Első Bevándorlás, ő lesz sokkal jobb, mint a megközelítés szkripteket.

Fontos megjegyzés: a legfontosabb dolog, amit meg szeretne nyomon követheti, ha vándorló adatbázisok általában amellett, hogy megfelelnek szerkezet - a biztonsági ügyfél adatait.

Nem valószínű, hogy azt szeretné, ha telepítette az új változata az ügyfél (vagy ami még rosszabb - vevők) Fontos tudni, hogy az automatikus migrációs rendszer törölte néhány adatot, és az ügyfél gondolkodik rovására valaki kompenzálja a veszteséget a pénzüket ...

Ezután fogok nyújtani egy tipikus példája a dolgozó vándorlások azonban nézzük először kiépítésére.

Hogyan kell telepíteni?

Először is hadd mondjam, hogy ez béta, az ezzel járó kockázatokat. Másodszor Kód Első Migrations már bekerültek az EF és nem kell külön telepíteni.

Természetesen tudod, hogy a telepítés NuGet-csomagok legkönnyebb megtenni a Package Manager Console (a továbbiakban: PM), úgyhogy úgy csak ezt a módszert. Telepítés A műveletek sorrendje a következő:

  • Ha ez a csomag „Code First Migrations Beta 1” lett állítva:
  • Telepítse EF 4.3 Beta 1 IncludePrerelease paraméter:

  • Indítsa újra a stúdióban. Ebben az esetben a parancsok PM nem tudom :)
  • Ahhoz, hogy gyorsítsák fel az írás egy példát, azt használja a modell Állvány. Ezért fogok hozzá még egy választható, az általános esetben, lépés:

    Példák munka vándorlások

    Azok, akik dolgoztak migrációk átléphet a következő szakaszban.

    Te még mindig itt vannak. ) Ezután nézzük meg egy egyszerű példát - adjunk hozzá egy modellt, majd adja hozzá az új tulajdonság, majd távolítsa el. Az adatok az új beépített mechanizmusokkal vándorol.

    Beállítása az adatbázis-kapcsolat

    Fogom használni az SQL Server Express. opcióként javasolt alapértelmezés szerint. Gyors kapcsolat a DbContext a web.config másolni egy már meglévő kapcsolat string (alapértelmezett ApplicationServices), és add meg a nevét, amely megegyezik a kontextus nevét:

    Fontos megjegyzés: Anélkül, hogy a kifejezés „Adatbázis = aspnetdb.mdf” alkalmazás, és a migráció nem fog megfelelően működni (alapértelmezés szerint ez a kifejezés nem jelenik meg a kapcsolat string).

    Ami az első változata a modell

    Most, hogy egy nagyon egyszerű modellt mutatunk be a következő parancsot:

    Ha olvasta a cikket ModelScaffolding már tudja, hogy ez hozza létre a következő modell (és az összes csővezetéket a szerkesztéssel egy ASP.NET MVC alkalmazás - vezérlő és az előadás):

    Fussunk mi alkalmazás, hozzátéve, hogy az URL „Tesztek” (tudod csinálni azonnal, hogy hozzanak létre egy projektet, hogy mentse a jövőben), és vezessen be egy kicsit az adatok.

    A fejlesztés és a hatékonyság a kód első vándorlások szervezet keretében 4

    Szeretném felhívni a figyelmet arra a tényre, hogy nem tudatosan kapcsolódik a migráció, hogy ellenőrizze, hogyan működne egy olyan helyzetben, ahol az adatok már ott van, és a migráció még nem volt csatlakoztatva.

    Előre tekintve azt jelenti, hogy annak ellenére, hogy a figyelmeztetés a ADO.NET csapatblogodban alábbiakban a hibákat, még nem volt esélye, hogy megfeleljen, nyilván nem volt túl pozitív hangulat :)

    Megjegyzés: Számos hibát a script funkciót EF 4.3 Beta1, hogy akadályozza meg generál egy script kezdve a migráció más, mint egy üres adatbázist. Ezeket a hibákat fogja meghatározni a végső RTM.

    Módosítása a modell és az első migrációs

    Annak érdekében, hogy a migráció most (mivel változat EF 4.3), akkor egyszerűen futtassa a következő parancsot:

    Ez növeli a projekt mappa „Bevándorlás” és „Configuration.cs” fájlt. Ha egyetért az alapértelmezett viselkedés, akkor húzza ki az automatikus migráció, semmi köze többé. Abban az esetben, ha DbContext-s lesz sokkal kell hozzá egy kicsit a fájlt manuálisan.

    Ha állítjuk össze alkalmazást, és nyissa fel, akkor az alábbi hibaüzenet egyértelmű:

    A modell fedező „MvcEfDemoContext” kontextus megváltozott, mivel az adatbázis létrehozása. Fontolja meg Code First Migrations frissíteni az adatbázist.

    Minden logikus - a modell megváltozott, az alap - nincs. Nézzük vándorolnak. Futtassa a következő parancsot, hogy adjunk egy migrációs:

    Paraméterként átadásra a migráció nevét (a fájl neve bekerül a bal oldalon a pontos időt). Ön szabadon választhat elnevezési sémát. Például, ha azt szeretnénk, folyamatos számozással - hívja migráció a formátumban: „00000”. Én személy szerint inkább a változat egy értelmes nevet, mert a rend már adott meg az aktuális időt.

    Sikeres elvégzése után ezt a parancsot, akkor kap egy osztály Migrációs, mely két módszer:

    Mint látható, a migráció támogatja az automatikus generálását és alkalmazását, és visszaállíthatja a változásokat, ami működik, legalábbis az egyszerű eseteket.

    Most már több lehetőség futtatni a migráció:

    • Alkalmazhatja a módosításokat közvetlenül az adatbázisba - a leggyorsabb és legegyszerűbb lehetőség (kimeneti futtatni parancsokat, felveheti a Részletes beállítás óta elérhető verzió EF 4.3 pont):
  • Létrehoz Script (megnyílik egy új ablakban Visual Studio):

  • A konzol alkalmazás „Update-Database.exe” (óta elérhető EF 4.3 verzió), az egyik a fenti forgatókönyvek. Ez az opció hasznos lehet az automatikus épít vagy fut a kliens-szerver, ahol nincs Visual Studio.
  • Ismét úgy dönt, hogy a migrációs folyamat kerül kialakításra. Például az első akkor először létrehoz egy forgatókönyvet, és nem az ő felülvizsgálatát. Aztán, ha minden rendben van, ha frissíti az adatbázist. Természetesen, azt javasoljuk, hogy alaposan tesztelni az új migrációs együtt a többi kód kiadás előtt az ügyfelek számára.

    Esetünkben az első migrációs majd adjunk hozzá egy oszlopot E-mail:

    Ezen túlmenően, a szolgáltatás táblákat információ tárolására a migráció az adatbázis jön létre.

    Ha fut az Update-adatbázis csapat, és ez végül a hibát „Nem nyitható meg az adatbázis ... által kért bejelentkezést.” Vagy: „fájl nem hozható létre»...«mert már létezik.” Ellenőrizze, hogy a connection string megadott „Adatbázis = aspnetdb. MDF „és a stúdió nem nyitott kapcsolat az adatbázisban.

    véglegesítése

    Szándékosan hagyta a hossza nincs megadva e-mail, úgyhogy most nézd meg, milyen a vándorlás bekövetkezik, ha megváltoztatja az attribútum tulajdonságainak. StringLength hozzáadunk egy attribútumot az ingatlan, így fokozva tovább vándorolnak és futtatni:

    A migráció az osztály lesz rendben, ez tartalmazza az alábbi módszerekkel:

    De megkezdése után a migráció megkapjuk hiba, mint ez:

    Az objektum DF__Tests__Email__014935CB "függ oszlop„E-mail”. ALTER TABLE ALTER oszlopban Küldje sikertelen volt, mert egy vagy több objektumot elérni ezt az oszlopot.

    Itt van egy igény, hogy a megvalósítás a migráció inkább mint az a tény, hogy a változás a táblázat „nem teljesen automatikus”, és hogy amikor létrehoz egy oszlop nincs default nevű kényszer „DF_Tests_Email”. Emiatt ebben a szakaszban fogunk áttérni podkovyrivat egy kicsit több, mint kéne. Kiderült:

    Mint látható, semmi rendkívüli, de a jelenlegi default-ah látta Entity Framework - legalábbis megpróbálja újra azt ugyanúgy megváltoztatása után az oszlopot - ha nem történt volna meg, akkor dopilivat kezét.

    Gördülő vissza migráció

    Most (mivel változat EF 4.3. Bár talán ez volt az előző béta, amely nem láttam), akkor visszaállíthatja a migráció. Megteheti ezt a segítségével a „TargetMigration”, ami azt kell mondani, szintén működik a múltban és a jövőben (ha szeretné alkalmazni az adatbázis migráció nem új).

    Problémák merültek fel, amikor a visszatérés nem (mert ez a módszer „Down”, javítottam a fenti együtt az „Up” módszer).

    eltávolítása oszlop

    Egy oszlop eltávolításához, akkor egyszerűen újra létre a modell eredeti formájában (nem a képviseleti jog), és ismételje meg a folyamatot a teremtés és alkalmazás migráció:

    Ha nem fut „Update-adatbázis” rollback áttérés után, nem adhat hozzá egy újat, amit akkor értesítjük hibaként:

    Ez a probléma javítva nélkül fut „Update-adatbázis”, az igazság egy figyelmeztetés eredményeképpen ez:

    Nem lehet alkalmazni, amíg a változtatásokat, mert az automatikus migráció le van tiltva. Annak érdekében, hogy az automatikus migráció, arról, hogy DbMigrationsConfiguration.AutomaticMigrationsEnabled van állítva.

    Automatikus migráció ebben az esetben egy olyan, adott esetben ismétlődő elég parancsot adni a migráció, majd frissítse az adatbázist.

    Hozzáadása kapcsolt modell

    Ahhoz, hogy nézd meg, hogy a migráció a kapcsolódó modellek létre őket:

    Az adagolás befejezése után a migráció fog kinézni:

    Megjegyezzük, hogy a migrációs mechanizmus gondoskodik rólunk, ami indexek oszlopokon részt egy idegen kulcs. Azt hiszem, ez inkább jó, mint rossz, különösen azért, mert akkor egyszerűen eltávolítja az index ebben a szakaszban.

    Ha frissíti az adatbázis ebben az esetben kap egy hiba, mert az oszlop „kategóriaazonosító” megkísérli feltölteni értéke 0, és egy értéket a táblázatban „kategória” magától nem jelenik meg.

    Azt hiszem, most már tudom, ahhoz, hogy megbirkózzanak a megoldást erre a problémára a saját. Adok csak egy tipp, hogy amikor beállítja a migráció ne csak végrehajtó SQL közvetlenül, de a beállításokat a kódot. Például, a módszer a „ColumnBuilder.Int” járulékosan egy paramétert „defaultValue”.

    automatizált migráció

    Azt fogja mondani, egy kicsit a már említett automatikus migráció. Lehetőség van használni a módot, ha nem szükséges hozzá a migrációs parancs segítségével explicit módon „Add-Migration”. Ez a mód tartalmazza az osztály „Configuration” a tulajdon „AutomaticMigrationsEnabled”.

    Jó vagy rossz - ez attól függ, túl sok tényező. Csak azt tudom hozzátenni, hogy senki sem zavar, hogy automatikusan hozzáadni a migráció kifejezetten, ha ez szükséges.

    Amellett, hogy automata módban is futtatható a migráció migrációs elején az alkalmazást MigrateDatabaseToLatestVersion tárol kezdőérték (elérhető verzió óta EF 4.3 pont).

    Mi maradt a kulisszák mögött

    Tehát, hogy ne fújja fel a cikket, azt nem mutatták bonyolultabb változatok (változások kapcsolódó táblázatokban, stb.) Persze, ami automatikusan működik, valamit meg dopilivat.

    Én is nem figyelni, hogy a következő újítások EF 4.3:

    • Hozzáadott kellően részletes dokumentációt XML-migráció osztályok.
    • Kivétel táblázatok „EdmMetadata” - Most, amikor először hozzon létre egy adatbázist a stílus Kód Első migráció nélkül, a migráció még ma is használják az automatikus üzemmódot :)
    • Pár hibajavítás (GetDatabaseValues ​​és Unicode támogatás DbSet).
    • Kód Első most már érti kommentárok zárt tulajdonságait.
    • Hozzáadott támogatása konfiguráció config-file.

    Angol részletekért kattintson ide.

    Eddig, amit én látok az EF 4.3 tekintve migráció tetszik, kivéve néhány hiányosságot. Persze, próbáld ki a migráció tényleg csak a használat kereskedelmi fejlesztés. Megvárom :)

    És miért úgy döntött, hogy ha a mező lehet üres, meg kell akasztani alapértelmezett konstreyt a generált névvel és egy üres érték? Jobb lenne, ha igyekeztek EF a ORM valahogy közelebb a NH :(

    Véleményem szerint ezek a helyzetek, amelyek miatt minden avtomigratsii kudarcra van ítélve - adatot írni sémakonvertálási lehet, és odaadta egyszerű műveletet - hozzáadni / eltávolítani oszlop / tábla / konstreynt. De adatmigrációt szinte lehetetlen, hogy automatizálják. Azonban, ha egy e-mail - ha megadjuk, hogy a mező értéket kell adni, egy üres string - egy mankó, nem az érték.

    Használom Migrator.Net - amennyit megold minden infrastrukturális kérdéseket, és a fejlesztő a leginkább aktuális kódot migráció.

    Ahhoz @Vasiliy Shiryaev:

    És mit kellett történnie, hiszen az a tény, hogy van a táblázat adatainak? By the way, senki sem zavar, hogy javítsa a migráció kód használat előtt.

    Ilyen egyszerű dolgok, mint megadhat egy alapértelmezett vannak írva közvetlenül a kódot, abban az esetben az adatok áthelyezés futtatható SQL módszerrel (például a cikkben).

    Ezért nem világos, hogy milyen előnye Migrator.Net -, hogy nem nyújt megoldást az egyszerű eseteket? ;)

    Mi kellett volna történnie? Attól függ, hogy a helyzet. Nem valószínű, hogy szükség nem null általános, lóg egy üres sor az alapértelmezett helyett null területeken több, mint elég, IMHO.
    A második kérdés, amit maguk hangot mintegy konstreynta nevét, és ehhez az mankó.

    Igen, Migratora.Net előnye, hogy nem kínál megoldást görbék egyszerű eseteket, amelyekre szükség van, hogy kövesse, majd ellenőrizze :)

    Hogy @Vasiliy Shiryaev
    > Felfüggesztett üres sor az alapértelmezett helyett null területeken több, mint elég, IMHO.

    Most már tudta, hogy mi volt a szinkront :)
    Tulajdonságok egy tulajdonság * Kötelező * - nem elég.

    És véleményem szerint ez még mindig furcsa - * Kötelező * azt jelenti, hogy a mező kitöltése kötelező, hogy a különbséget. Egy üres értéket - ez valahogy furcsa keretében * Kötelező *, de elfogadható - ha nincs több lehetőség az aktuális adatokat. És itt az alapértelmezett az új adatok konstreynt pontosan egyszer.
    Itt migrator tennie kellett valamit:
    - hozzon létre egy üres mező
    - állítsa be az összes sort, az alapértelmezett érték
    - frissíti a mező nem nulla.

    Ahhoz @Vasiliy Shiryaev:
    > Itt migrator tennie kellett valamit.

    Ez, azt mondják, az íze és színe.
    Voltam a megközelítés létrehozását alapértelmezett korlát ideges amiatt, hogy ő nem kapott rendes neve.
    Emlékeztetem önöket, hogy ha szükséges, a migráció könnyen be lehet állítani az alapértelmezett használata nélkül SQL-kódot.

    Ami migrator általában - azt hiszem, vagy ártalom a használat függ célok és a csapat. Valaki lesz hasznosabb valakinek kárt.

    Hogyan kell kódolni az első használat tárolt eljárások?

    Jó napot kívánok. Úgy látszik, a leírása egy példa, amely kimaradt a szükséges adatokat.
    A létrehozott összefüggésben nem tartalmaz context.Test, amely létrehoz egy varázsló. Korrekcióját a context.Tests, nem működik az alábbi prvedenny vezérlő

    public class TestController. ellenőr
    privát MyMvc3Context context = new MyMvc3Context ();
    nyilvános ViewResult Index ()
    visszaút View (context.Tests.ToList ());

    Generiruettsya hiba: A típus „Teszt” nem tulajdonítanak EdmEntityTypeAttribute de tartalmaz egy összeállítást tulajdonítanak EdmSchemaAttribute. POCO szervezetek, amelyek nem használják EdmEntityTypeAttribute nem hárítható ugyanabban a szerkezetben, mint a nem POCO felhasználó szervezetek EdmEntityTypeAttribute.

    Névtelen:
    > És hogyan kell kódolni az első használat tárolt eljárások?

    Migrációs eljárás nem tűnik nyújtani.

    Ahhoz @Alex Fatkin:
    A projekt EDMX-fájlokat? Kód első nem barátkozni velük.