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.
Megjegyzés:
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Készítette: Rick Anderson
Ebben a szakaszban az entity framework migrations a következőre szolgál:
- Adjon hozzá egy új mezőt a modellhez.
- Az új mező áttelepítése az adatbázisba.
Ha az Entity Framework (EF) használatával automatikusan létrehoz egy adatbázist modellosztályokból:
- A rendszer hozzáad egy táblát az adatbázishoz az adatbázis sémájának nyomon követéséhez.
- A rendszer ellenőrzi, hogy az adatbázis szinkronban van-e a létrehozott modellosztályokkal. Ha nincsenek szinkronban, az EF kivételt jelez. Így könnyebben megtalálhatja az adatbázissal/kóddal kapcsolatos inkonzisztens problémákat.
Minősítési tulajdonság hozzáadása a filmmodellhez
Adj egy Rating tulajdonságot a Models/Movie.cs-hez.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcMovie.Models;
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; }
}
Az alkalmazás létrehozása
Nyomja le Ctrl+Shift+B
Mivel új mezőt adott hozzá az Movie osztályhoz, frissítenie kell a tulajdonságkötési listát, hogy ez az új tulajdonság szerepeljen benne.
MoviesController.cs frissítse az [Bind] attribútumot mind a Create és Edit műveleti metódusok esetében a Rating tulajdonság hozzáadásával.
[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]
Frissítse a nézetsablonokat az új Rating tulajdonság böngészőnézetben való megjelenítéséhez, létrehozásához és szerkesztéséhez.
Szerkessze a /Views/Movies/Index.cshtml fájlt, és adjon hozzá egy Rating mezőt:
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Rating)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Movies!)
{
<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-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
Frissítse a /Views/Movies/Create.cshtml mezőt egy Rating mezővel.
Másolhatja/beillesztheti az előző "űrlapcsoportot", és az intelliSense segítségével frissítheti a mezőket. Az IntelliSense használható Címkesegédekkel.
Adja hozzá a Rating tulajdonságot a maradék Create.cshtml, Delete.cshtml, Details.cshtml és Edit.cshtml nézet sablonokhoz.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban látható egy mintamódosítás, de minden new Movie esetében érdemes ezt a módosítást elvégezni.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
Az alkalmazás csak akkor működik, ha az adatbázis frissül, hogy az új mezőt is tartalmazza. Ha most fut, a következő SqlException lesz:
SqlException: Invalid column name 'Rating'.
Ez a hiba azért fordul elő, mert a frissített filmmodell-osztály eltér a meglévő adatbázis Movie táblájának sémáitól. (Az adatbázistábla nem Rating tartalmaz oszlopot.)
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 modell osztály séma szerint. Ez a megközelítés nagyon kényelmes a fejlesztési ciklus korai szakaszában, amikor aktív fejlesztést végez egy tesztadatbázison; lehetővé teszi a modell és az adatbázis sémájának gyors együttfejlését. A hátránya azonban az, hogy elveszíti a meglévő adatokat az adatbázisban – ezért nem szeretné ezt a megközelítést éles adatbázisban használni! Az inicializáló használata az adatbázisok automatikus üzembe helyezése tesztadatokkal gyakran hatékony módszer az alkalmazások fejlesztésére. Ez jó módszer a korai fejlesztéshez és az SQLite használatakor.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a módszernek az az előnye, hogy megtartja az adatait. Ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával végezheti el.
Az adatbázisséma frissítéséhez használja az Entity Framework Migrations szolgáltatást.
Ebben az oktatóanyagban az Entity Framework Migrationst használjuk.
Az Eszközök menüben válassza a NuGet Package Manager > Csomagkezelő konzollehetőséget.
A Package Manager konzolon adja meg a következő parancsot:
Add-Migration Rating
A Add-Migration parancs arra utasítja a migrálási keretrendszert, hogy vizsgálja meg az aktuális Movie modellt az aktuális Movie DB-sémával, és hozza létre a szükséges kódot a db ú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.
Ha az adatbázis összes rekordja törölve van, az inicializáló metódus beinicializálja az adatbázist, illetve tartalmazza a Rating mezőt.
A Package Manager konzolon adja meg a következő parancsot:
Update-Database
A Update-Database parancs a nem alkalmazott áttelepítéseken futtatja a Fel metódust.
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket.
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Az új mező áttelepítése az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy táblát az adatbázishoz az adatbázis sémájának nyomon követéséhez.
- Ellenőrzi, hogy az adatbázis szinkronban van-e a létrehozott modellosztályokkal. Ha nincsenek szinkronban, az EF kivételt jelez. Így könnyebben megtalálhatja az adatbázissal/kóddal kapcsolatos inkonzisztens problémákat.
Minősítési tulajdonság hozzáadása a filmmodellhez
Adj egy Rating tulajdonságot a Models/Movie.cs-hez.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcMovie.Models;
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; }
}
Az alkalmazás létrehozása
Nyomja le Ctrl+Shift+B
Mivel új mezőt adott hozzá az Movie osztályhoz, frissítenie kell a tulajdonságkötési listát, hogy ez az új tulajdonság szerepeljen benne.
MoviesController.cs frissítse az [Bind] attribútumot mind a Create és Edit műveleti metódusok esetében a Rating tulajdonság hozzáadásával.
[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]
Frissítse a nézetsablonokat az új Rating tulajdonság böngészőnézetben való megjelenítéséhez, létrehozásához és szerkesztéséhez.
Szerkessze a /Views/Movies/Index.cshtml fájlt, és adjon hozzá egy Rating mezőt:
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Rating)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Movies!)
{
<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-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
Frissítse a /Views/Movies/Create.cshtml mezőt egy Rating mezővel.
Másolhatja/beillesztheti az előző "űrlapcsoportot", és az intelliSense segítségével frissítheti a mezőket. Az IntelliSense használható Címkesegédekkel.
Frissítse a fennmaradó sablonokat.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban látható egy mintamódosítás, de minden new Movie esetében érdemes ezt a módosítást elvégezni.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
Az alkalmazás csak akkor működik, ha az adatbázis frissül, hogy az új mezőt is tartalmazza. Ha most fut, a következő SqlException lesz:
SqlException: Invalid column name 'Rating'.
Ez a hiba azért fordul elő, mert a frissített filmmodell-osztály eltér a meglévő adatbázis Movie táblájának sémáitól. (Az adatbázistábla nem Rating tartalmaz oszlopot.)
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 modell osztály séma szerint. Ez a megközelítés nagyon kényelmes a fejlesztési ciklus korai szakaszában, amikor aktív fejlesztést végez egy tesztadatbázison; lehetővé teszi a modell és az adatbázis sémájának gyors együttfejlését. A hátránya azonban az, hogy elveszíti a meglévő adatokat az adatbázisban – ezért nem szeretné ezt a megközelítést éles adatbázisban használni! Az inicializáló használata az adatbázisok automatikus üzembe helyezése tesztadatokkal gyakran hatékony módszer az alkalmazások fejlesztésére. Ez jó módszer a korai fejlesztéshez és az SQLite használatakor.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a módszernek az az előnye, hogy megtartja az adatait. Ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával végezheti el.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban a Code First Migrationst használja a rendszer.
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 arra utasítja a migrálási keretrendszert, hogy vizsgálja meg az aktuális Movie modellt az aktuális Movie DB-sémával, és hozza létre a szükséges kódot a db ú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.
Ha az adatbázis összes rekordja törölve van, az inicializáló metódus beinicializálja az adatbázist, illetve tartalmazza a Rating mezőt.
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket.
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Az új mező áttelepítése az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy táblát az adatbázishoz az adatbázis sémájának nyomon követéséhez.
- Ellenőrzi, hogy az adatbázis szinkronban van-e a létrehozott modellosztályokkal. Ha nincsenek szinkronban, az EF kivételt jelez. Így könnyebben megtalálhatja az adatbázissal/kóddal kapcsolatos inkonzisztens problémákat.
Minősítési tulajdonság hozzáadása a filmmodellhez
Adj egy Rating tulajdonságot a Models/Movie.cs-hez.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcMovie.Models;
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; }
}
Az alkalmazás létrehozása
Nyomja le Ctrl+Shift+B
Mivel új mezőt adott hozzá az Movie osztályhoz, frissítenie kell a tulajdonságkötési listát, hogy ez az új tulajdonság szerepeljen benne.
MoviesController.cs frissítse az [Bind] attribútumot mind a Create és Edit műveleti metódusok esetében a Rating tulajdonság hozzáadásával.
[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]
Frissítse a nézetsablonokat az új Rating tulajdonság böngészőnézetben való megjelenítéséhez, létrehozásához és szerkesztéséhez.
Szerkessze a /Views/Movies/Index.cshtml fájlt, és adjon hozzá egy Rating mezőt:
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies![0].Rating)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Movies!)
{
<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-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
Frissítse a /Views/Movies/Create.cshtml mezőt egy Rating mezővel.
Másolhatja/beillesztheti az előző "űrlapcsoportot", és az intelliSense segítségével frissítheti a mezőket. Az IntelliSense használható Címkesegédekkel.
Frissítse a fennmaradó sablonokat.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban látható egy mintamódosítás, de minden new Movie esetében érdemes ezt a módosítást elvégezni.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
Az alkalmazás csak akkor működik, ha az adatbázis frissül, hogy az új mezőt is tartalmazza. Ha most fut, a következő SqlException lesz:
SqlException: Invalid column name 'Rating'.
Ez a hiba azért fordul elő, mert a frissített filmmodell-osztály eltér a meglévő adatbázis Movie táblájának sémáitól. (Az adatbázistábla nem Rating tartalmaz oszlopot.)
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 modell osztály séma szerint. Ez a megközelítés nagyon kényelmes a fejlesztési ciklus korai szakaszában, amikor aktív fejlesztést végez egy tesztadatbázison; lehetővé teszi a modell és az adatbázis sémájának gyors együttfejlését. A hátránya azonban az, hogy elveszíti a meglévő adatokat az adatbázisban – ezért nem szeretné ezt a megközelítést éles adatbázisban használni! Az inicializáló használata az adatbázisok automatikus üzembe helyezése tesztadatokkal gyakran hatékony módszer az alkalmazások fejlesztésére. Ez jó módszer a korai fejlesztéshez és az SQLite használatakor.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a módszernek az az előnye, hogy megtartja az adatait. Ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával végezheti el.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban a Code First Migrationst használja a rendszer.
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 arra utasítja a migrálási keretrendszert, hogy vizsgálja meg az aktuális Movie modellt az aktuális Movie DB-sémával, és hozza létre a szükséges kódot a db ú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.
Ha az adatbázis összes rekordja törölve van, az inicializáló metódus beinicializálja az adatbázist, illetve tartalmazza a Rating mezőt.
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket.
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Az új mező áttelepítése az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy táblát az adatbázishoz az adatbázis sémájának nyomon követéséhez.
- Ellenőrzi, hogy az adatbázis szinkronban van-e a létrehozott modellosztályokkal. Ha nincsenek szinkronban, az EF kivételt jelez. Így könnyebben megtalálhatja az adatbázissal/kóddal kapcsolatos inkonzisztens problémákat.
Minősítési tulajdonság hozzáadása a filmmodellhez
Adj egy Rating tulajdonságot a Models/Movie.cs-hez.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcMovie.Models
{
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; }
}
}
Az alkalmazás létrehozása
Ctrl+Shift+B
Mivel új mezőt adott hozzá az Movie osztályhoz, frissítenie kell a tulajdonságkötési listát, hogy ez az új tulajdonság szerepeljen benne.
MoviesController.cs frissítse az [Bind] attribútumot mind a Create és Edit műveleti metódusok esetében a Rating tulajdonság hozzáadásával.
[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]
Frissítse a nézetsablonokat az új Rating tulajdonság böngészőnézetben való megjelenítéséhez, létrehozásához és szerkesztéséhez.
Szerkessze a /Views/Movies/Index.cshtml fájlt, és adjon hozzá egy Rating mezőt:
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Rating)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Movies)
{
<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-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
Frissítse a /Views/Movies/Create.cshtml mezőt egy Rating mezővel.
Másolhatja/beillesztheti az előző "űrlapcsoportot", és az intelliSense segítségével frissítheti a mezőket. Az IntelliSense használható Címkesegédekkel.
Frissítse a fennmaradó sablonokat.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban látható egy mintamódosítás, de minden new Movie esetében érdemes ezt a módosítást elvégezni.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
Az alkalmazás csak akkor működik, ha az adatbázis frissül, hogy az új mezőt is tartalmazza. Ha most fut, a következő SqlException lesz:
SqlException: Invalid column name 'Rating'.
Ez a hiba azért fordul elő, mert a frissített filmmodell-osztály eltér a meglévő adatbázis Movie táblájának sémáitól. (Az adatbázistábla nem Rating tartalmaz oszlopot.)
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 modell osztály séma szerint. Ez a megközelítés nagyon kényelmes a fejlesztési ciklus korai szakaszában, amikor aktív fejlesztést végez egy tesztadatbázison; lehetővé teszi a modell és az adatbázis sémájának gyors együttfejlését. A hátránya azonban az, hogy elveszíti a meglévő adatokat az adatbázisban – ezért nem szeretné ezt a megközelítést éles adatbázisban használni! Az inicializáló használata az adatbázisok automatikus üzembe helyezése tesztadatokkal gyakran hatékony módszer az alkalmazások fejlesztésére. Ez jó módszer a korai fejlesztéshez és az SQLite használatakor.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a módszernek az az előnye, hogy megtartja az adatait. Ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával végezheti el.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban a Code First Migrationst használja a rendszer.
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 arra utasítja a migrálási keretrendszert, hogy vizsgálja meg az aktuális Movie modellt az aktuális Movie DB-sémával, és hozza létre a szükséges kódot a db ú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.
Ha az adatbázis összes rekordja törölve van, az inicializáló metódus beinicializálja az adatbázist, illetve tartalmazza a Rating mezőt.
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket.
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Az új mező áttelepítése az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy táblát az adatbázishoz az adatbázis sémájának nyomon követéséhez.
- Ellenőrzi, hogy az adatbázis szinkronban van-e a létrehozott modellosztályokkal. Ha nincsenek szinkronban, az EF kivételt jelez. Így könnyebben megtalálhatja az adatbázissal/kóddal kapcsolatos inkonzisztens problémákat.
Minősítési tulajdonság hozzáadása a filmmodellhez
Adj egy Rating tulajdonságot a Models/Movie.cs-hez.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcMovie.Models
{
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; }
}
}
Az alkalmazás létrehozása
Ctrl+Shift+B
Mivel új mezőt adott hozzá az Movie osztályhoz, frissítenie kell a tulajdonságkötési listát, hogy ez az új tulajdonság szerepeljen benne.
MoviesController.cs frissítse az [Bind] attribútumot mind a Create és Edit műveleti metódusok esetében a Rating tulajdonság hozzáadásával.
[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]
Frissítse a nézetsablonokat az új Rating tulajdonság böngészőnézetben való megjelenítéséhez, létrehozásához és szerkesztéséhez.
Szerkessze a /Views/Movies/Index.cshtml fájlt, és adjon hozzá egy Rating mezőt:
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Rating)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Movies)
{
<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>
Frissítse a /Views/Movies/Create.cshtml mezőt egy Rating mezővel.
Másolhatja/beillesztheti az előző "űrlapcsoportot", és az intelliSense segítségével frissítheti a mezőket. Az IntelliSense használható Címkesegédekkel.
Frissítse a fennmaradó sablonokat.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban látható egy mintamódosítás, de minden new Movie esetében érdemes ezt a módosítást elvégezni.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
Az alkalmazás csak akkor működik, ha az adatbázis frissül, hogy az új mezőt is tartalmazza. Ha most fut, a következő SqlException lesz:
SqlException: Invalid column name 'Rating'.
Ez a hiba azért fordul elő, mert a frissített filmmodell-osztály eltér a meglévő adatbázis Movie táblájának sémáitól. (Az adatbázistábla nem Rating tartalmaz oszlopot.)
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 modell osztály séma szerint. Ez a megközelítés nagyon kényelmes a fejlesztési ciklus korai szakaszában, amikor aktív fejlesztést végez egy tesztadatbázison; lehetővé teszi a modell és az adatbázis sémájának gyors együttfejlését. A hátránya azonban az, hogy elveszíti a meglévő adatokat az adatbázisban – ezért nem szeretné ezt a megközelítést éles adatbázisban használni! Az inicializáló használata az adatbázisok automatikus üzembe helyezése tesztadatokkal gyakran hatékony módszer az alkalmazások fejlesztésére. Ez jó módszer a korai fejlesztéshez és az SQLite használatakor.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a módszernek az az előnye, hogy megtartja az adatait. Ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával végezheti el.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban a Code First Migrationst használja a rendszer.
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 arra utasítja a migrálási keretrendszert, hogy vizsgálja meg az aktuális Movie modellt az aktuális Movie DB-sémával, és hozza létre a szükséges kódot a db ú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.
Ha az adatbázis összes rekordja törölve van, az inicializáló metódus beinicializálja az adatbázist, illetve tartalmazza a Rating mezőt.
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket.
Ebben a szakaszban a Entity Framework Code First Migrations használatos a következő célokra:
- Adjon hozzá egy új mezőt a modellhez.
- Az új mező áttelepítése az adatbázisba.
Amikor az EF Code First használatával automatikusan létrehoz egy adatbázist, a Code First:
- Hozzáad egy táblát az adatbázishoz az adatbázis sémájának nyomon követéséhez.
- Ellenőrzi, hogy az adatbázis szinkronban van-e a létrehozott modellosztályokkal. Ha nincsenek szinkronban, az EF kivételt jelez. Így könnyebben megtalálhatja az adatbázissal/kóddal kapcsolatos inkonzisztens problémákat.
Minősítési tulajdonság hozzáadása a filmmodellhez
Adj egy Rating tulajdonságot a Models/Movie.cs-hez.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcMovie.Models
{
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; }
}
}
Az alkalmazás létrehozása
Ctrl+Shift+B
Mivel új mezőt adott hozzá az Movie osztályhoz, frissítenie kell a tulajdonságkötési listát, hogy ez az új tulajdonság szerepeljen benne.
MoviesController.cs frissítse az [Bind] attribútumot mind a Create és Edit műveleti metódusok esetében a Rating tulajdonság hozzáadásával.
[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]
Frissítse a nézetsablonokat az új Rating tulajdonság böngészőnézetben való megjelenítéséhez, létrehozásához és szerkesztéséhez.
Szerkessze a /Views/Movies/Index.cshtml fájlt, és adjon hozzá egy Rating mezőt:
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Movies[0].Rating)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Movies)
{
<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>
Frissítse a /Views/Movies/Create.cshtml mezőt egy Rating mezővel.
Másolhatja/beillesztheti az előző "űrlapcsoportot", és az intelliSense segítségével frissítheti a mezőket. Az IntelliSense használható Címkesegédekkel.
Frissítse a fennmaradó sablonokat.
Frissítse a SeedData osztályt, hogy értéket adjon az új oszlopnak. Az alábbiakban látható egy mintamódosítás, de minden new Movie esetében érdemes ezt a módosítást elvégezni.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
Az alkalmazás csak akkor működik, ha az adatbázis frissül, hogy az új mezőt is tartalmazza. Ha most fut, a következő SqlException lesz:
SqlException: Invalid column name 'Rating'.
Ez a hiba azért fordul elő, mert a frissített filmmodell-osztály eltér a meglévő adatbázis Movie táblájának sémáitól. (Az adatbázistábla nem Rating tartalmaz oszlopot.)
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 modell osztály séma szerint. Ez a megközelítés nagyon kényelmes a fejlesztési ciklus korai szakaszában, amikor aktív fejlesztést végez egy tesztadatbázison; lehetővé teszi a modell és az adatbázis sémájának gyors együttfejlését. A hátránya azonban az, hogy elveszíti a meglévő adatokat az adatbázisban – ezért nem szeretné ezt a megközelítést éles adatbázisban használni! Az inicializáló használata az adatbázisok automatikus üzembe helyezése tesztadatokkal gyakran hatékony módszer az alkalmazások fejlesztésére. Ez jó módszer a korai fejlesztéshez és az SQLite használatakor.
Explicit módon módosítsa a meglévő adatbázis sémáját úgy, hogy az megfeleljen a modellosztályoknak. Ennek a módszernek az az előnye, hogy megtartja az adatait. Ezt a módosítást manuálisan vagy adatbázis-módosítási szkript létrehozásával végezheti el.
Az adatbázisséma frissítéséhez használja a Code First Migrations szolgáltatást.
Ebben az oktatóanyagban a Code First Migrationst használja a rendszer.
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 arra utasítja a migrálási keretrendszert, hogy vizsgálja meg az aktuális Movie modellt az aktuális Movie DB-sémával, és hozza létre a szükséges kódot a db ú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.
Ha az adatbázis összes rekordja törölve van, az inicializáló metódus beinicializálja az adatbázist, illetve tartalmazza a Rating mezőt.
Futtassa az alkalmazást, és ellenőrizze, hogy Rating mezővel hozhat létre, szerkeszthet és jeleníthet meg filmeket.