ایجاد حرفهای رکورد با ViewModel در EF Core
در معماری MVC (Model-View-Controller)، مدیریت ارتباط بین View (رابط کاربری) و Model (مدل دادهای) اهمیت زیادی دارد. برای جلوگیری از ارسال مستقیم مدلهای دیتابیس به View و بالعکس، از مفهومی به نام ViewModel استفاده میشود. این رویکرد به ما کمک میکند تا دادهها را ایمنتر و ساختاریافتهتر مدیریت کنیم. در این آموزش، نحوه استفاده از ViewModel برای عملیاتCreate در EF Core 9 را به صورت مرحلهبهمرحله توضیح میدهیم. و با ایجاد حرفهای رکورد با ViewModel در EF Core آشنا میشویم.
ایجاد Action برای نمایش فرم
public IActionResult Create()
{
return View();
}
ایجاد Action برای دریافت دادهها
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(
[Bind("Id,Name,Family,Phone,Email")] CerateDeveloperViewModel DeveloperVM)
{
if (ModelState.IsValid)
{
var DeveloperM = new Developer()
{
Id = DeveloperVM.Id,
Name = DeveloperVM.Name,
Family = DeveloperVM.Family,
Email = DeveloperVM.Email,
Phone = DeveloperVM.Phone,
RegisterDate = DateTime.Now
};
_context.Add(DeveloperM);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(DeveloperVM);
}
- ابتدا دادههای ViewModel را با ModelState.IsValid بررسی میکنیم.
- در صورت معتبر بودن دادهها، ViewModel به موجودیت (Entity) تبدیل شده. و در دیتابیس ذخیره میشود.
- پس از ذخیره موفقیتآمیز، کاربر به صفحه دیگری هدایت میشود.
نکات تکمیلی
- اعتبارسنجی سمت کلاینت و سرور: اعتبارسنجی در ViewModel به صورت خودکار در سرور اجرا میشود. با استفاده از @section Scripts در View، اعتبارسنجی سمت کلاینت نیز فعال میشود.
- مدیریت خطاها: اگر خطایی در ذخیره داده رخ دهد (مانند مشکلات دیتابیس)، باید به کاربر پیام مناسب نمایش داده شود.
- استفاده از AutoMapper: برای پروژههای بزرگتر، میتوانید از کتابخانه AutoMapper برای تبدیل ViewModel به Entity استفاده کنید
- قابلیت گسترش ViewModel: میتوانید دادههای اضافی مانند لیست دستهبندیها را نیز در ViewModel قرار دهید.
جمعبندی ایجاد حرفهای رکورد با ViewModel در EF Core
- با استفاده از ViewModel در عملیات Create: امنیت دادهها افزایش مییابد.
- ساختار کد تمیزتر و منظمتر میشود.
- مدیریت و اعتبارسنجی دادهها سادهتر خواهد بود.
- این روش نهتنها برای عملیات Create بلکه برای سایر عملیات (مانند Update) نیز بهشدت توصیه میشود.