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.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. Ha a legfrissebb kiadást keresed, nézd meg ennek a cikknek a .NET 9-es verzióját .
Készítette: Rick Anderson
Ebben a szakaszban Entity Framework Core (EF Core) az adatbázisséma az alkalmazás modellosztálya alapján történő meghatározására szolgál:
- Adjon hozzá egy új mezőt a modellhez.
- Migrálja az új mezőséma-módosítást az adatbázisba.
A EF Core megközelítés lehetővé teszi az agilisabb fejlesztési folyamatot. A fejlesztő közvetlenül az alkalmazás adatmodelljén dolgozik, miközben az adatbázisséma létrejön, majd szinkronizálódik, mindezt anélkül, hogy a fejlesztőnek át kellene váltania a környezeteket egy adatbázis-kezelő eszközre. Az Entity Framework Core és előnyeinek áttekintéséért lásd Entity Framework Core.
Adatbázis automatikus létrehozása és nyomon követése EF Code használatával:
- Hozzáad egy
__EFMigrationsHistorytáblát az adatbázishoz annak nyomon követéséhez, hogy az adatbázis sémája szinkronban van-e a létrehozott modellosztályokkal. - Kivételt eredményez, ha a modellosztályok nincsenek szinkronban az adatbázissal.
A séma és a modell szinkronizálásának automatikus ellenőrzése megkönnyíti az adatbáziskódok inkonzisztens hibáinak megtalálását.
Minősítési tulajdonság hozzáadása a filmmodellhez
Nyissa meg a
Models/Movie.csfájlt, és adjon hozzá egyRatingtulajdonságot:public class Movie { public int Id { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Pages/Movies/Index.cshtmlszerkesztése ésRatingmező hozzáadása:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> | <a asp-page="./Details" asp-route-id="@item.Id">Details</a> | <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a> </td> </tr> } </tbody> </table>Frissítse a következő lapokat egy
Ratingmezővel:
Az alkalmazás addig nem működik, amíg az adatbázis nem frissül, hogy tartalmazza az új mezőt. Az alkalmazás frissítés nélküli futtatása az adatbázisra egy SqlExceptionhibát okoz:
SqlException: Invalid column name 'Rating'.
A SqlException kivételt az okozza, hogy a frissített filmmodell-osztály eltér az adatbázis Movie táblájának sémáitól. Nincs Rating oszlop az adatbázistáblában.
A hiba megoldásának néhány módszere van:
- Az Entity Framework automatikusan elveti és újra létrehozza az adatbázist az új modellosztály-sémával. Ez a megközelítés a fejlesztési ciklus korai szakaszában kényelmes, lehetővé teszi a fejlesztők számára a modell és az adatbázis sémájának gyors fejlesztését. A hátránya az, hogy az adatbázisban meglévő adatok elvesznek. Ne használja ezt a megközelítést éles adatbázisban! Az adatbázis sémamódosításokra való elvetése és az adatbázis automatikus üzembe helyezése tesztadatokkal történő inicializáló használatával gyakran hatékony módszer egy alkalmazás fejlesztésére.
- Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a megközelítésnek az az előnye, hogy megtartja az adatokat. Végezze el ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával.
- Az adatbázisséma frissítéséhez használja a EF Core migrálásokat.
Ebben az oktatóanyagban használja a EF Core migrálásokat.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban egy mintamódosítás látható, de végezze el ezt a módosítást az egyes new Movie blokkok esetében.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Tekintse meg a befejezett SeedData.cs fájlt.
Az alkalmazás létrehozása
Nyomja le Ctrl+Shift+B
Migrálás hozzáadása a minősítési mezőhöz
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A Package Manager-konzolon (PMC) adja meg a következő parancsot:
Add-Migration Rating
A Add-Migration parancs a következőre utasítja a keretrendszert:
- Hasonlítsa össze a
Moviemodellt aMovieadatbázissémával. - Hozzon létre kódot az adatbázisséma új modellbe való migrálásához.
A "Rating" név tetszőleges, és az áttelepítési fájl elnevezésére szolgál. Hasznos, ha a migrálási fájlnak értelmes nevet ad.
A PMC-ben adja meg a következő parancsot:
Update-Database
A Update-Database parancs arra utasítja a keretrendszert, hogy alkalmazza a sémamódosításokat az adatbázisra, és őrizze meg a meglévő adatokat.
Törölje az adatbázis összes rekordját, az inicializáló beállítja az adatbázist és tartalmazza a Rating mezőt. A törlés a böngészőben található törlési hivatkozásokkal vagy Sql Server Object Explorer (SSOX) használatával végezhető el.
Egy másik lehetőség az adatbázis törlése és az áttelepítések használata az adatbázis újbóli létrehozásához. Az adatbázis törlése az SSOX-ban:
Válassza ki az adatbázist az SSOX-ban.
Kattintson a jobb gombbal az adatbázisra, és válassza a Törléslehetőséget.
Ellenőrizze a meglévő kapcsolatok bezárását .
Kattintson az OK gombra.
Frissítse az adatbázist a PMC-ben:
Update-Database
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket. Ha az adatbázis nincs feltöltve, állítson be egy töréspontot a SeedData.Initialize metódusban.
Következő lépések
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Migrálja az új mezőséma-módosítást az adatbázisba.
Ha az EF Code First módszert használja egy adatbázis automatikus létrehozására és nyomon követésére:
- Hozzáad egy
__EFMigrationsHistorytáblát az adatbázishoz annak nyomon követéséhez, hogy az adatbázis sémája szinkronban van-e a létrehozott modellosztályokkal. - Kivételt eredményez, ha a modellosztályok nincsenek szinkronban az adatbázissal.
A séma és a modell szinkronizálásának automatikus ellenőrzése megkönnyíti az adatbáziskódok inkonzisztens hibáinak megtalálását.
Minősítési tulajdonság hozzáadása a filmmodellhez
Nyissa meg a
Models/Movie.csfájlt, és adjon hozzá egyRatingtulajdonságot:public class Movie { public int Id { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Pages/Movies/Index.cshtmlszerkesztése ésRatingmező hozzáadása:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> | <a asp-page="./Details" asp-route-id="@item.Id">Details</a> | <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a> </td> </tr> } </tbody> </table>Frissítse a következő lapokat egy
Ratingmezővel:
Az alkalmazás addig nem működik, amíg az adatbázis nem frissül, hogy tartalmazza az új mezőt. Az alkalmazás frissítés nélküli futtatása az adatbázisra egy SqlExceptionhibát okoz:
SqlException: Invalid column name 'Rating'.
A SqlException kivételt az okozza, hogy a frissített filmmodell-osztály eltér az adatbázis Movie táblájának sémáitól. Nincs Rating oszlop az adatbázistáblában.
A hiba megoldásának néhány módszere van:
- Az Entity Framework automatikusan elveti és újra létrehozza az adatbázist az új modellosztály-sémával. Ez a megközelítés a fejlesztési ciklus korai szakaszában kényelmes, lehetővé teszi a fejlesztők számára a modell és az adatbázis sémájának gyors fejlesztését. A hátránya az, hogy az adatbázisban meglévő adatok elvesznek. Ne használja ezt a megközelítést éles adatbázisban! Az adatbázis sémamódosításokra való elvetése és az adatbázis automatikus üzembe helyezése tesztadatokkal történő inicializáló használatával gyakran hatékony módszer egy alkalmazás fejlesztésére.
- Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a megközelítésnek az az előnye, hogy megtartja az adatokat. Végezze el ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával.
- Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban használja a Code First Migrationst.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban egy mintamódosítás látható, de végezze el ezt a módosítást az egyes new Movie blokkok esetében.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Tekintse meg a befejezett SeedData.cs fájlt.
Az alkalmazás létrehozása
Nyomja le Ctrl+Shift+B
Migrálás hozzáadása a minősítési mezőhöz
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A PMC-ben adja meg a következő parancsokat:
Add-Migration Rating Update-Database
A Add-Migration parancs a következőre utasítja a keretrendszert:
- Hasonlítsa össze a
Moviemodellt aMovieadatbázissémával. - Hozzon létre kódot az adatbázisséma új modellbe való migrálásához.
A "Rating" név tetszőleges, és az áttelepítési fájl elnevezésére szolgál. Hasznos, ha a migrálási fájlnak értelmes nevet ad.
A Update-Database parancs arra utasítja a keretrendszert, hogy alkalmazza a sémamódosításokat az adatbázisra, és őrizze meg a meglévő adatokat.
Törölje az adatbázis összes rekordját, az inicializáló beállítja az adatbázist és tartalmazza a Rating mezőt. A törlés a böngészőben található törlési hivatkozásokkal vagy Sql Server Object Explorer (SSOX) használatával végezhető el.
Egy másik lehetőség az adatbázis törlése és az áttelepítések használata az adatbázis újbóli létrehozásához. Az adatbázis törlése az SSOX-ban:
Válassza ki az adatbázist az SSOX-ban.
Kattintson a jobb gombbal az adatbázisra, és válassza a Törléslehetőséget.
Ellenőrizze a meglévő kapcsolatok bezárását .
Kattintson az OK gombra.
Frissítse az adatbázist a PMC-ben:
Update-Database
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket. Ha az adatbázis nincs feltöltve, állítson be egy töréspontot a SeedData.Initialize metódusban.
Következő lépések
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Migrálja az új mezőséma-módosítást az adatbázisba.
Ha az EF Code First módszert használja egy adatbázis automatikus létrehozására és nyomon követésére:
- Hozzáad egy
__EFMigrationsHistorytáblát az adatbázishoz annak nyomon követéséhez, hogy az adatbázis sémája szinkronban van-e a létrehozott modellosztályokkal. - Kivételt eredményez, ha a modellosztályok nincsenek szinkronban az adatbázissal.
A séma és a modell szinkronizálásának automatikus ellenőrzése megkönnyíti az adatbáziskódok inkonzisztens hibáinak megtalálását.
Minősítési tulajdonság hozzáadása a filmmodellhez
Nyissa meg a
Models/Movie.csfájlt, és adjon hozzá egyRatingtulajdonságot:public class Movie { public int Id { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Pages/Movies/Index.cshtmlszerkesztése ésRatingmező hozzáadása:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> | <a asp-page="./Details" asp-route-id="@item.Id">Details</a> | <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a> </td> </tr> } </tbody> </table>Frissítse a következő lapokat egy
Ratingmezővel:
Az alkalmazás addig nem működik, amíg az adatbázis nem frissül, hogy tartalmazza az új mezőt. Az alkalmazás frissítés nélküli futtatása az adatbázisra egy SqlExceptionhibát okoz:
SqlException: Invalid column name 'Rating'.
A SqlException kivételt az okozza, hogy a frissített filmmodell-osztály eltér az adatbázis Movie táblájának sémáitól. Nincs Rating oszlop az adatbázistáblában.
A hiba megoldásának néhány módszere van:
- Az Entity Framework automatikusan elveti és újra létrehozza az adatbázist az új modellosztály-sémával. Ez a megközelítés a fejlesztési ciklus korai szakaszában kényelmes, lehetővé teszi a fejlesztők számára a modell és az adatbázis sémájának gyors fejlesztését. A hátránya az, hogy az adatbázisban meglévő adatok elvesznek. Ne használja ezt a megközelítést éles adatbázisban! Az adatbázis sémamódosításokra való elvetése és az adatbázis automatikus üzembe helyezése tesztadatokkal történő inicializáló használatával gyakran hatékony módszer egy alkalmazás fejlesztésére.
- Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a megközelítésnek az az előnye, hogy megtartja az adatokat. Végezze el ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával.
- Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban használja a Code First Migrationst.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban egy mintamódosítás látható, de végezze el ezt a módosítást az egyes new Movie blokkok esetében.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Tekintse meg a befejezett SeedData.cs fájlt.
Az alkalmazás létrehozása
Nyomja le Ctrl+Shift+B
Migrálás hozzáadása a minősítési mezőhöz
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A PMC-ben adja meg a következő parancsokat:
Add-Migration Rating Update-Database
A Add-Migration parancs a következőre utasítja a keretrendszert:
- Hasonlítsa össze a
Moviemodellt aMovieadatbázissémával. - Hozzon létre kódot az adatbázisséma új modellbe való migrálásához.
A "Rating" név tetszőleges, és az áttelepítési fájl elnevezésére szolgál. Hasznos, ha a migrálási fájlnak értelmes nevet ad.
A Update-Database parancs arra utasítja a keretrendszert, hogy alkalmazza a sémamódosításokat az adatbázisra, és őrizze meg a meglévő adatokat.
Törölje az adatbázis összes rekordját, az inicializáló beállítja az adatbázist és tartalmazza a Rating mezőt. A törlés a böngészőben található törlési hivatkozásokkal vagy Sql Server Object Explorer (SSOX) használatával végezhető el.
Egy másik lehetőség az adatbázis törlése és az áttelepítések használata az adatbázis újbóli létrehozásához. Az adatbázis törlése az SSOX-ban:
Válassza ki az adatbázist az SSOX-ban.
Kattintson a jobb gombbal az adatbázisra, és válassza a Törléslehetőséget.
Ellenőrizze a meglévő kapcsolatok bezárását .
Kattintson az OK gombra.
Frissítse az adatbázist a PMC-ben:
Update-Database
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket. Ha az adatbázis nincs feltöltve, állítson be egy töréspontot a SeedData.Initialize metódusban.
Következő lépések
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Migrálja az új mezőséma-módosítást az adatbázisba.
Ha az EF Code First módszert használja egy adatbázis automatikus létrehozására és nyomon követésére:
- Hozzáad egy
__EFMigrationsHistorytáblát az adatbázishoz annak nyomon követéséhez, hogy az adatbázis sémája szinkronban van-e a létrehozott modellosztályokkal. - Kivételt eredményez, ha a modellosztályok nincsenek szinkronban az adatbázissal.
A séma és a modell szinkronizálásának automatikus ellenőrzése megkönnyíti az adatbáziskódok inkonzisztens hibáinak megtalálását.
Minősítési tulajdonság hozzáadása a filmmodellhez
Nyissa meg a
Models/Movie.csfájlt, és adjon hozzá egyRatingtulajdonságot:public class Movie { public int ID { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Pages/Movies/Index.cshtmlszerkesztése ésRatingmező hozzáadása:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table>Frissítse a következő lapokat egy
Ratingmezővel:
Az alkalmazás addig nem működik, amíg az adatbázis nem frissül, hogy tartalmazza az új mezőt. Az alkalmazás frissítés nélküli futtatása az adatbázisra egy SqlExceptionhibát okoz:
SqlException: Invalid column name 'Rating'.
A SqlException kivételt az okozza, hogy a frissített filmmodell-osztály eltér az adatbázis Movie táblájának sémáitól. Nincs Rating oszlop az adatbázistáblában.
A hiba megoldásának néhány módszere van:
- Az Entity Framework automatikusan elveti és újra létrehozza az adatbázist az új modellosztály-sémával. Ez a megközelítés a fejlesztési ciklus korai szakaszában kényelmes, lehetővé teszi a fejlesztők számára a modell és az adatbázis sémájának gyors fejlesztését. A hátránya az, hogy az adatbázisban meglévő adatok elvesznek. Ne használja ezt a megközelítést éles adatbázisban! Az adatbázis sémamódosításokra való elvetése és az adatbázis automatikus üzembe helyezése tesztadatokkal történő inicializáló használatával gyakran hatékony módszer egy alkalmazás fejlesztésére.
- Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a megközelítésnek az az előnye, hogy megtartja az adatokat. Végezze el ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával.
- Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban használja a Code First Migrationst.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban egy mintamódosítás látható, de végezze el ezt a módosítást az egyes new Movie blokkok esetében.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Tekintse meg a befejezett SeedData.cs fájlt.
Hozza létre a megoldást.
Migrálás hozzáadása a minősítési mezőhöz
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A PMC-ben adja meg a következő parancsokat:
Add-Migration Rating Update-Database
A Add-Migration parancs a következőre utasítja a keretrendszert:
- Hasonlítsa össze a
Moviemodellt aMovieadatbázissémával. - Hozzon létre kódot az adatbázisséma új modellbe való migrálásához.
A "Rating" név tetszőleges, és az áttelepítési fájl elnevezésére szolgál. Hasznos, ha a migrálási fájlnak értelmes nevet ad.
A Update-Database parancs arra utasítja a keretrendszert, hogy alkalmazza a sémamódosításokat az adatbázisra, és őrizze meg a meglévő adatokat.
Törölje az adatbázis összes rekordját, az inicializáló beállítja az adatbázist és tartalmazza a Rating mezőt. A törlés a böngészőben található törlési hivatkozásokkal vagy Sql Server Object Explorer (SSOX) használatával végezhető el.
Egy másik lehetőség az adatbázis törlése és az áttelepítések használata az adatbázis újbóli létrehozásához. Az adatbázis törlése az SSOX-ban:
Válassza ki az adatbázist az SSOX-ban.
Kattintson a jobb gombbal az adatbázisra, és válassza a Törléslehetőséget.
Ellenőrizze a meglévő kapcsolatok bezárását .
Kattintson az OK gombra.
Frissítse az adatbázist a PMC-ben:
Update-Database
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket. Ha az adatbázis nincs feltöltve, állítson be egy töréspontot a SeedData.Initialize metódusban.
Következő lépések
Mintakód megtekintése vagy letöltése (hogyan lehet letölteni).
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Migrálja az új mezőséma-módosítást az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy
__EFMigrationsHistorytáblát az adatbázishoz annak nyomon követéséhez, hogy az adatbázis sémája szinkronban van-e a létrehozott modellosztályokkal. - Ha a modellosztályok nincsenek szinkronban az adatbázissal, az EF kivételt jelez.
A séma és a modell szinkronizálásának automatikus ellenőrzése megkönnyíti az adatbáziskódok inkonzisztens hibáinak megtalálását.
Minősítési tulajdonság hozzáadása a filmmodellhez
Nyissa meg a
Models/Movie.csfájlt, és adjon hozzá egyRatingtulajdonságot:public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } }Hozza létre az alkalmazást.
Szerkeszd a
Pages/Movies/Index.cshtmlelemet, és adj hozzá egyRatingmezőt.@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table>Frissítse a következő lapokat egy
Ratingmezővel:
Az alkalmazás addig nem működik, amíg az adatbázis nem frissül, hogy tartalmazza az új mezőt. Az alkalmazás frissítés nélküli futtatása az adatbázisra egy SqlExceptionhibát okoz:
SqlException: Invalid column name 'Rating'.
A SqlException kivételt az okozza, hogy a frissített filmmodell-osztály eltér az adatbázis Movie táblájának sémáitól. Nincs Rating oszlop az adatbázistáblában.
A hiba megoldásának néhány módszere van:
Az Entity Framework automatikusan elveti és újra létrehozza az adatbázist az új modellosztály-sémával. Ez a megközelítés a fejlesztési ciklus korai szakaszában kényelmes, lehetővé teszi a modell és az adatbázis sémájának gyors fejlesztését. A hátránya az, hogy elveszíti a meglévő adatokat az adatbázisban. Ne használja ezt a megközelítést éles adatbázisban! Az adatbázis sémamódosításokra való elvetése és az adatbázis automatikus üzembe helyezése tesztadatokkal történő inicializáló használatával gyakran hatékony módszer egy alkalmazás fejlesztésére.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a megközelítésnek az az előnye, hogy megtartja az adatokat. Végezze el ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban használja a Code First Migrationst.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban egy mintamódosítás látható, de végezze el ezt a módosítást az egyes new Movie blokkok esetében.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Tekintse meg a befejezett SeedData.cs fájlt.
Hozza létre a megoldást.
Migrálás hozzáadása a minősítési mezőhöz
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A PMC-ben adja meg a következő parancsokat:
Add-Migration Rating Update-Database
A Add-Migration parancs a következőre utasítja a keretrendszert:
- Hasonlítsa össze a
Moviemodellt aMovieadatbázissémával. - Hozzon létre kódot az adatbázisséma új modellbe való migrálásához.
A "Rating" név tetszőleges, és az áttelepítési fájl elnevezésére szolgál. Hasznos, ha a migrálási fájlnak értelmes nevet ad.
A Update-Database parancs arra utasítja a keretrendszert, hogy alkalmazza a sémamódosításokat az adatbázisra, és őrizze meg a meglévő adatokat.
Törölje az adatbázis összes rekordját, az inicializáló beállítja az adatbázist és tartalmazza a Rating mezőt. A törlés a böngészőben található törlési hivatkozásokkal vagy Sql Server Object Explorer (SSOX) használatával végezhető el.
Egy másik lehetőség az adatbázis törlése és az áttelepítések használata az adatbázis újbóli létrehozásához. Az adatbázis törlése az SSOX-ban:
Válassza ki az adatbázist az SSOX-ban.
Kattintson a jobb gombbal az adatbázisra, és válassza a Törléslehetőséget.
Ellenőrizze a meglévő kapcsolatok bezárását .
Kattintson az OK gombra.
Frissítse az adatbázist a PMC-ben:
Update-Database
Futtassa az alkalmazást, és ellenőrizze, hogy létrehozhat-e, szerkeszthet-e és megjeleníthet-e filmeket egy Rating mezővel. Ha az adatbázis nincs feltöltve, állítson be egy töréspontot a SeedData.Initialize metódusban.
Következő lépések
Mintakód megtekintése vagy letöltése (hogyan lehet letölteni).
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Migrálja az új mezőséma-módosítást az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy
__EFMigrationsHistorytáblát az adatbázishoz annak nyomon követéséhez, hogy az adatbázis sémája szinkronban van-e a létrehozott modellosztályokkal. - Ha a modellosztályok nincsenek szinkronban az adatbázissal, az EF kivételt jelez.
A séma és a modell szinkronizálásának automatikus ellenőrzése megkönnyíti az adatbáziskódok inkonzisztens hibáinak megtalálását.
Minősítési tulajdonság hozzáadása a filmmodellhez
Nyissa meg a
Models/Movie.csfájlt, és adjon hozzá egyRatingtulajdonságot:public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } }Hozza létre az alkalmazást.
Szerkeszd a
Pages/Movies/Index.cshtmlelemet, és adj hozzá egyRatingmezőt.@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table>Frissítse a következő lapokat egy
Ratingmezővel:
Az alkalmazás addig nem működik, amíg az adatbázis nem frissül, hogy tartalmazza az új mezőt. Az alkalmazás frissítés nélküli futtatása az adatbázisra egy SqlExceptionhibát okoz:
SqlException: Invalid column name 'Rating'.
A SqlException kivételt az okozza, hogy a frissített filmmodell-osztály eltér az adatbázis Movie táblájának sémáitól. Nincs Rating oszlop az adatbázistáblában.
A hiba megoldásának néhány módszere van:
Az Entity Framework automatikusan elveti és újra létrehozza az adatbázist az új modellosztály-sémával. Ez a megközelítés a fejlesztési ciklus korai szakaszában kényelmes, lehetővé teszi a modell és az adatbázis sémájának gyors fejlesztését. A hátránya az, hogy elveszíti a meglévő adatokat az adatbázisban. Ne használja ezt a megközelítést éles adatbázisban! Az adatbázis sémamódosításokra való elvetése és az adatbázis automatikus üzembe helyezése tesztadatokkal történő inicializáló használatával gyakran hatékony módszer egy alkalmazás fejlesztésére.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a megközelítésnek az az előnye, hogy megtartja az adatokat. Végezze el ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban használja a Code First Migrationst.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban egy mintamódosítás látható, de végezze el ezt a módosítást az egyes new Movie blokkok esetében.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Tekintse meg a befejezett SeedData.cs fájlt.
Hozza létre a megoldást.
Migrálás hozzáadása a minősítési mezőhöz
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A PMC-ben adja meg a következő parancsokat:
Add-Migration Rating Update-Database
A Add-Migration parancs a következőre utasítja a keretrendszert:
- Hasonlítsa össze a
Moviemodellt aMovieadatbázissémával. - Hozzon létre kódot az adatbázisséma új modellbe való migrálásához.
A "Rating" név tetszőleges, és az áttelepítési fájl elnevezésére szolgál. Hasznos, ha a migrálási fájlnak értelmes nevet ad.
A Update-Database parancs arra utasítja a keretrendszert, hogy alkalmazza a sémamódosításokat az adatbázisra, és őrizze meg a meglévő adatokat.
Ha törli az adatbázis összes rekordját, az inicializáló megtölti az adatbázist és tartalmazza a Rating mezőt. Ezt a böngészőben található törlési hivatkozásokkal vagy Sql Server Object Explorer (SSOX) segítségével teheti meg.
Egy másik lehetőség az adatbázis törlése és az áttelepítések használata az adatbázis újbóli létrehozásához. Az adatbázis törlése az SSOX-ban:
Válassza ki az adatbázist az SSOX-ban.
Kattintson a jobb gombbal az adatbázisra, és válassza a Törléslehetőséget.
Ellenőrizze a meglévő kapcsolatok bezárását .
Kattintson az OK gombra.
Frissítse az adatbázist a PMC-ben:
Update-Database
Futtassa az alkalmazást, és ellenőrizze, hogy létrehozhat-e, szerkeszthet-e és megjeleníthet-e filmeket egy Rating mezővel. Ha az adatbázis nincs feltöltve, állítson be egy töréspontot a SeedData.Initialize metódusban.