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 elkezdi használni a EF Core migrációs funkciót az adatmodell-változások kezelésére. 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
- Migráció végrehajtása
Prerequisites
Tudnivalók a migrálásokról
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 kezdte, hogy úgy konfigurálta az Entity Framework-et, hogy az adatbázist hozza létre, 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 Csomagkezelő-konzolt (PMC) vagy a parancssori felületet. Ezek az oktatóanyagok bemutatják a parancssori interfész (CLI) 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 architektúra megadásához tekintse át, hogyan használhatja a dotnet tool install parancsot az "--arch" beállítással.
További információért lásd: GitHub dotnet/aspnetcore.docs hibajegy #29262 - Apple Siliconon adja hozzá az „-a arm64” kapcsolót.
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
Amikor végrehajtotta az migrations add parancsot, az EF generálta a kódot, amely a semmiből létrehozza az adatbázist. 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 migrations add InitialCreate parancs megadásakor létrehozott kezdeti migrációhoz 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 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ókhoz juthat 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
Migráció végrehajtá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, hogy ellenőrizze, 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 Csomagkezelő 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 amit a parancssori felülethez az .csproj fájl szerkesztésével telepít. Ennek a neve, a CLI-csomag nevével ellentétben, Tools vé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: Csomagkezelő Console (Visual Studio).
A kód lekérése
Töltse le vagy tekintse meg a befejezett alkalmazást.
Következő lépés
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ációkat fog létrehozni és alkalmazni.