مشخصات مقاله
-
1605
-
0.0
-
5149
-
0
-
0
آموزش ASP.Net MVC Core - آموزش افزودن یک فیلد جدید در ASP.Net MVC Core
برای مشاهده سر فصل های مربوط به آموزش MVC Core کلیک نمایید.
آموزش MVC Core - افزودن یک فیلد جدید در ASP.Net MVC Core
در این قسمت Entity Framework Code First برای اضافه کردن یک فیلد جدید به مدل و انتقال آن به پایگاه داده استفاده کنید.
هنگامی که از EF Code First برای ایجاد یک پایگاه داده استفاده می کنید،Code First یک جدول را به پایگاه داده اضافه می کند تا به شناسایی شیء پایگاه داده با کلاس های مدل از آن بپردازد. اگر آنها در هماهنگی نیستند، EF یک استثناء(exception) را صادر می کند. این امر باعث می شود که مشکلات پایگاه داده / کد ناسازگار پیدا شود.
اضافه کردن امتیاز (Rating) به مدل فیلم در ASP.Net MVC Core
فایل Models/Movie.cs را باز کرده و ویژگی Rating را اضافه کنید:
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; }
public decimal Price { get; set; }
public string Rating { get; set; }
}
پروژه را با استفاده از (Ctrl+Shift+B) Build کنید.
از آنجا که شما یک فیلد جدید برای کلاس Movie اضافه کرده اید،احتیاج به بروز رسانی دارید تا فیلد یا ویژگی جدید اضافه شود.
در فایل MoviesController.cs ویژگی [Bind] را برای اکشن Create و Edit با اضافه کردن Rating به روز کنید:
[Bind("ID,Title,ReleaseDate,Genre,Price,Rating")]
همچنین برای display و create و edit در قالب View ویژگی Rating باید اضافه کنیم:
< 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 >
فایل Views/Movies/Create.cshtml با فیلد Rating به روز کنید.شما می توانید با copy/paste از "form group" قبلی و با کمک از intelliSense فیلد مورد نظر را اضافه کنید. IntelliSense با Tag Helpers کار می کند.
در نسخه RTM ویژوال استودیو 2017 شما نیاز به نصب سرویسهای Razor Language برای Razor intelliSense دارید.
این برنامه تا زمانی که DB را برای فیلد جدید به روز نکنیم کار نمی کند.اگر شما برنامه را اجرا کنید یک خطای SqlException دریافت می کنید:
SqlException: Invalid column name 'Rating'.
شما این خطا را مشاهده می کنید چون کلاس مدل فیلم به روز شده و متفاوت از طرح جدول فیلم پایگاه داده موجود است.(ستون Rating در جدول پایگاه داده موجود نیست!)
چند روش برای حل این خطا وجود دارد:
- Entity Framework را به صورت خودکار رها کنید و پایگاه داده را بر اساس طرح جدید کلاس مدل ایجاد کنید.این رویکرد بسیار ابتدایی برای زمانی که از یک پایگاه داده تست استفاده می کنید بسیار آسان است. این اجازه می دهد تا شما به سرعت مدل و طرح پایگاه داده را با هم هماهنگ کنید.اما قسمت بد این رویکرد این است که اطلاعات موجود در پایگاه داده را از دست می دهید.بنابراین شما نمی خواهید از این رویکرد در پایگاه داده استفاده کنید.با استفاده از یک initializer به طور خودکار پایگاه داده را با test data مقدار دهی می کنیم که اغلب یک راه مناسب و سازنده برای توسعه برنامه است.
- به طور صریح شیوه پایگاه داده موجود را اصلاح کنید تا آن را با کلاس های مدل سازگار سازید. مزیت این روش این است که شما اطلاعات خود را نگه می دارید. شما می توانید این تغییر را به صورت دستی یا با ایجاد اسکریپت تغییر پایگاه داده انجام دهید.
با استفاده از Use Code First Migrations طرح پایگاه داده را به روز کنید.
در این آموزش ما از Code First Migrations استفاده می کنیم.
کلاس SeedData را به روزرسانی کنید تا مقدار آن برای ستون جدید فراهم شود. تغییر نمونه در زیر نشان داده شده است، اما شما می خواهید این تغییر را برای هر فیلم جدید ایجاد کنید:
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R",
Price = 7.99M
},
پروژه را Build کنید.
از منوی Tools برنامه Package Manager Console. را باز کنید:
در PMC کدهای زیر را وارد کنید:
Add-Migration Rating Update-Database
فرمان افزودن مهاجرت(Add-Migration) به framework مهاجرت برای بررسی مدل فیلم فعلی با طرح Schema Current Movie می پردازد و کد لازم را برای مهاجرت DB به مدل جدید ایجاد می کند. نام " Rating " دلخواه است و برای نامگذاری فایل migration استفاده می شود.خوب است که برای فایل مهاجرت از نامهای معنی دار که به ما کمک می کند استفاده کنیم.
اگر شما تمام سوابق را در DB حذف کنید، مقداردهی اولیه DB را بسط می دهد و شامل فیلد Rating می شود. شما می توانید این کار را با لینک های حذف شده در مرورگر یا از SSOX انجام دهید.
برنامه را اجرا کنید و تأیید کنید که میتوانید فیلمی را Create / Edit / Display دهید. شما همچنین باید فیلد رتبه بندی را به قالب های Edit، Details و Delete اضافه کنید.