Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben az oktatóanyagban a migrálási funkciót fogja használni az EF Core adatmodell változásainak kezeléséhez. A későbbi oktatóanyagokban további migrálásokat fog hozzáadni az adatmodell módosításakor.
Ebben az útmutatóban Ön:
- Tudnivalók a migrálásokról
- Kezdeti migrálás létrehozása
- Fel és le metódusok vizsgálata
- Tudnivalók az adatmodell pillanatképéről
- A migrálás alkalmazása
Prerequisites
About migrations
Amikor új alkalmazást fejleszt, az adatmodell gyakran változik, és minden alkalommal, amikor a modell megváltozik, a rendszer nem szinkronizálódik az adatbázissal. Ezeket az oktatóanyagokat úgy indította el, hogy konfigurálta az Entity Frameworkt az adatbázis létrehozásához, ha az nem létezik. Ezután minden alkalommal, amikor módosítja az adatmodellt – entitásosztályokat vehet fel, távolíthat el vagy módosíthat, vagy módosíthatja a DbContext osztályt –, törölheti az adatbázist, és az EF létrehoz egy újat, amely megfelel a modellnek, és tesztadatokkal adhatja meg.
Ez a módszer, amellyel az adatbázis szinkronban marad az adatmodellel, mindaddig működik, amíg éles környezetben nem helyezi üzembe az alkalmazást. Amikor az alkalmazás éles környezetben fut, általában azokat az adatokat tárolja, amelyeket meg szeretne őrizni, és nem szeretne mindent elveszíteni minden alkalommal, amikor módosítást, például új oszlopot ad hozzá. A EF Core Migrálás funkció úgy oldja meg ezt a problémát, hogy engedélyezi az EF számára az adatbázisséma frissítését új adatbázis létrehozása helyett.
A migrálások használatához használhatja a Package Manager-konzolt (PMC) vagy a parancssori felületet. Ezek az oktatóanyagok bemutatják a PARANCSSOR-parancsok használatát. A PMC-vel kapcsolatos információk az oktatóanyag végén találhatók.
Az adatbázis elvetése
Telepítse az EF Core eszközöket globális eszközként , és törölje az adatbázist:
dotnet tool install --global dotnet-ef
dotnet ef database drop
Note
Alapértelmezés szerint a telepíteni kívánt .NET bináris fájlok architektúrája a jelenleg futó operációsrendszer-architektúrát jelöli. Egy másik operációsrendszer-architektúra megadásához lásd: dotnet tool install , --arch option. További információ: GitHub-probléma dotnet/AspNetCore.Docs #29262.
Az alábbi szakasz bemutatja, hogyan futtathat parancssori felületi parancsokat.
Kezdeti migrálás létrehozása
Mentse a módosításokat, és hozza létre a projektet. Ezután nyisson meg egy parancsablakot, és keresse meg a projektmappát. Ezt gyorsan megteheti:
A Megoldáskezelőben kattintson a jobb gombbal a projektre, és válassza a Mappa megnyitása a Fájlkezelőben parancsot a helyi menüben.
Írja be a "cmd" kifejezést a címsorba, és nyomja le az Enter billentyűt.
Írja be a következő parancsot a parancsablakba:
dotnet ef migrations add InitialCreate
Az előző parancsokban az alábbihoz hasonló kimenet jelenik meg:
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
Done. To undo this action, use 'ef migrations remove'
Ha a következő hibaüzenet jelenik meg: "Nem fér hozzá a fájlhoz ... ContosoUniversity.dll, mert egy másik folyamat használja", keresse meg az IIS Express ikont a Windows rendszertálcájában, és kattintson rá a jobb gombbal, majd kattintson a ContosoUniversity > stop site parancsra.
Fel és le metódusok vizsgálata
A parancs végrehajtásakor az migrations add EF létrehozta az adatbázist létrehozó kódot. Ez a kód a Migrations mappában található, a fájl neve .<timestamp>_InitialCreate.cs Az Up osztály metódusa InitialCreate létrehozza az adatmodell-entitáskészleteknek megfelelő adatbázistáblákat, és a Down metódus törli őket az alábbi példában látható módon.
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Course",
columns: table => new
{
CourseID = table.Column<int>(nullable: false),
Credits = table.Column<int>(nullable: false),
Title = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Course", x => x.CourseID);
});
// Additional code not shown
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Enrollment");
// Additional code not shown
}
}
A migrációs folyamatok meghívják az Up metódust az áttelepítés adatmodell-módosításainak implementálásához. Amikor megad egy parancsot a frissítés visszaállításához, a migrálás meghívja a Down metódust.
Ez a kód a parancs megadásakor létrehozott kezdeti migrálásra migrations add InitialCreate szolgál. Az áttelepítési név paraméter ("InitialCreate" a példában) a fájlnévhez használatos, és tetszőleges lehet. A legjobb, ha olyan szót vagy kifejezést választ, amely összefoglalja, hogy mi történik a migrálás során. Elnevezhet például egy későbbi migrációt "AddDepartmentTable"-nek.
Ha a kezdeti áttelepítést akkor hozta létre, amikor az adatbázis már létezik, a rendszer létrehozza az adatbázis-létrehozási kódot, de nem kell futtatnia, mert az adatbázis már megfelel az adatmodellnek. Amikor egy másik olyan környezetben helyezi üzembe az alkalmazást, ahol az adatbázis még nem létezik, ez a kód az adatbázis létrehozásához fog futni, ezért érdemes először tesztelni. Ezért vetette el korábban az adatbázist, hogy a migrálások újat hozzanak létre az alapoktól.
Az adatmodell pillanatképe
A migrálások pillanatképet hoznak létre az aktuális adatbázissémáról a következőben Migrations/SchoolContextModelSnapshot.cs: . Migrálás hozzáadásakor az EF az adatmodell és a pillanatképfájl összehasonlításával határozza meg, hogy mi változott.
Az áttelepítés eltávolításához használja a dotnet ef migrations remove parancsot.
dotnet ef migrations remove törli az áttelepítést, és gondoskodik a pillanatkép helyes visszaállításáról. Ha dotnet ef migrations remove nem sikerül, dotnet ef migrations remove -v további információt kaphat a hibáról.
A pillanatképfájl használatáról további információt a Csoportkörnyezetek áttelepítései című témakörben talál.EF Core
A migrálás alkalmazása
A parancsablakban adja meg a következő parancsot az adatbázis és a benne lévő táblák létrehozásához.
dotnet ef database update
A parancs kimenete hasonló a migrations add parancshoz, kivéve, hogy az adatbázist beállítva SQL-parancsok naplói láthatók. A naplók többsége nem szerepel a következő mintakimenetben. Ha inkább nem szeretné látni ezt a részletességi szintet a naplóüzenetekben, módosíthatja a naplószintet a appsettings.Development.json fájlban. További információ: Naplózás a .NET-ben és a ASP.NET Core-ban.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (274ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
CREATE DATABASE [ContosoUniversity2];
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (60ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
IF SERVERPROPERTY('EngineEdition') <> 5
BEGIN
ALTER DATABASE [ContosoUniversity2] SET READ_COMMITTED_SNAPSHOT ON;
END;
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
<logs omitted for brevity>
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20190327172701_InitialCreate', N'5.0-rtm');
Done.
Az SQL Server Object Explorerrel ugyanúgy vizsgálhatja meg az adatbázist, mint az első oktatóanyagban. Ekkor megjelenik egy __EFMigrationsHistory tábla hozzáadása, amely nyomon követi, hogy mely migrálások lettek alkalmazva az adatbázisra. Tekintse meg a táblázatban szereplő adatokat, és az első migráláshoz egy sort fog látni. (Az előző CLI-kimeneti példa utolsó naplója a sort létrehozó INSERT utasítást mutatja.)
Futtassa az alkalmazást annak ellenőrzéséhez, hogy minden továbbra is ugyanúgy működik-e, mint korábban.
A parancssori felület és a PMC összehasonlítása
A migrálások kezelésére szolgáló EF-eszköz a .NET CLI-parancsokból vagy a Visual Studio Package Manager Console (PMC) ablak PowerShell-parancsmagjaiból érhető el. Ez az oktatóanyag bemutatja, hogyan használhatja a parancssori felületet, de igény szerint használhatja a PMC-t.
A PMC-parancsok EF-parancsai a Microsoft.EntityFrameworkCore.Tools csomagban találhatók. Ez a csomag szerepel a Microsoft.AspNetCore.App metacsomagban, így nem kell csomaghivatkozást hozzáadnia, ha az alkalmazás rendelkezik csomaghivatkozással Microsoft.AspNetCore.App.
Fontos: Ez nem ugyanaz a csomag, mint amelyet a parancssori felületre a fájl szerkesztésével .csproj telepít. Ennek a neve a CLI-csomag nevével ellentétben ToolsTools.DotNetvégződik.
A parancssori felület parancsaival kapcsolatos további információkért lásd: .NET CLI.
A PMC-parancsokkal kapcsolatos további információkért lásd: Package Manager Console (Visual Studio).
A kód lekérése
Töltse le vagy tekintse meg a befejezett alkalmazást.
Next step
Lépjen tovább a következő oktatóanyagra, amely az adatmodell kibővítésével kapcsolatos részletesebb témaköröket mutatja be. A folyamat során további migrálásokat fog létrehozni és alkalmazni.