عملیات CRUD با AutoMapper

تهران آی تی / برنامــه نویــسـی / عملیات CRUD با AutoMapper

عملیات CRUD با AutoMapper

عملیات CRUD با AutoMapper در ASP.NET Core باعث ساده‌سازی و بهبود مدیریت داده‌ها بین مدل‌های دیتابیس و ViewModel‌ها می‌شود. AutoMapper فرآیند تبدیل (Mapping) بین مدل‌های پیچیده و ساختارهای نمایش را خودکار می‌کند، به‌طوری که دیگر نیازی به کدنویسی دستی برای انتقال داده‌ها نیست. این روش، علاوه بر کاهش پیچیدگی و افزایش خوانایی کد، خطر اشتباهات انسانی را در انتقال داده‌ها کاهش داده و عملکرد برنامه را در سطح بهتری مدیریت می‌کند.

کانفیگ AutoMapper

قبل از هر کاری باید به فایل Mappings/MappingProfile.cs که در جلسه قبل ایجاد کردیم بریم. این کلاس برای مدیریت و تعریف Mapping ها ایجاد می‌شود تا پروژه شما ساختارمند، تمیز و انعطاف‌پذیر باشد. در واقع توسط این کلاس ما AutoMapper را گانفیگ میکنیم.

public MappingProfile()
{
CreateMap<Manager,ManagerViewModel>();
CreateMap<Manager,ManagerFormViewModel>().ReverseMap();
//CreateMap<ManagerFormViewModel, Manager>();
}

  • متد CreateMap در AutoMapper یک متد کلیدی برای تعریف Mapping بین دو کلاس (منبع و مقصد) است. این متد مشخص می‌کند که چگونه داده‌های یک کلاس به کلاس دیگر تبدیل شوند.
  • متد ReverseMap() باعث می‌شود که Mapping دوطرفه شود.

تزریق AutoMapper به کنترلر

تزریق AutoMapper به کنترلر باعث می‌شود که عملیات Mapping به‌صورت خودکار و تمیز انجام شود. این کار موجب افزایش خوانایی، تست‌پذیری و نگهداری کد می‌شود.

private readonly MyDbContext _context;
private readonly IMapper _mapper;
public ManagersController(MyDbContext context,IMapper mapper)
{
_context = context;
_mapper = mapper;
}

نمایش لیست با استفاده از AutoMapper

روش اول : مپ به صورت ساده

var ManagerM = await _context.managers.ToListAsync();
List<ManagerViewModel> ManagerVm=_mapper.Map<List<ManagerViewModel>>(ManagerM);

روش دوم : مپ به صورت حرفه ای

var ManagerVm = await _context.managers.AsNoTracking().
ProjectTo<ManagerViewModel>(_mapper.ConfigurationProvider).ToListAsync();
if (ManagerVm.Count == 0)
{
ViewBag.Message = "مقداری یافت نشد";
}
return View(ManagerVm);

  • متد AsNoTracking ردیابی یا Tracking در Entity Framework Core را غیرفعال می‌کند. باعث افزایش سرعت و کاهش مصرف حافظه می‌شود، به‌خصوص زمانی که نیازی به ویرایش داده‌ها نیست.
  • متد ProjectTo یکی از قابلیت‌های کلیدی AutoMapper است. برای Map کردن داده‌ها به صورت مستقیم از دیتابیس به مدل‌های مقصد (مانند DTO یا ViewModel) استفاده می‌شود. این متد به‌خصوص در Entity Framework Core بسیار محبوب و بهینه است. و باعث می‌شود تنها فیلدهای مورد نیاز از دیتابیس بازیابی شوند.

دریافت Enum ها و ارسال به View

مند PopulateGenderList به شما امکان می‌دهد که به راحتی مقادیر ثابت همان Enum (مانند جنسیت) را در یک لیست انتخابی نمایش دهید، بدون اینکه نیاز باشد به صورت دستی مقادیر را وارد کنید. این موضوع کدنویسی را ساده‌تر و کمتر مستعد خطا می‌کند.

از این متد در اکشن های Create و Edit استفاده شده است.

  • کد های متد

private void PopulateGenderList()
{
ViewBag.GenderList = new SelectList(Enum.GetValues(typeof(Gender)).Cast<Gender>());
}

  • نحوه فراخوانی در RazoeView

<select asp-for="Gender" asp-items="@ViewBag.GenderList" class="form-select"></select>

نمایش جزئیات – Details با استفاده از AutoMapper

متد Details با استفاده از AutoMapper، داده‌های جدول managers را به ViewModel تبدیل می‌کند. AutoMapper فرآیند Mapping را ساده کرده و کد را خواناتر می‌سازد. این متد نمونه‌ای عالی از استفاده از AutoMapper برای کاهش پیچیدگی در تبدیل مدل‌ها و بهبود خوانایی کد است.

public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var ManagerVm = await _context.managers.
Where(a => a.Id == id).
ProjectTo<ManagerViewModel>(_mapper.ConfigurationProvider).
FirstOrDefaultAsync();
if (ManagerVm == null)
{
return NotFound();
}
return View(ManagerVm);
}

ایجاد رکورد – Create با استفاده از AutoMapper

عملیات Create شامل متدهای GET و POST برای عملیات Create در ASP.NET Core است. با استفاده از AutoMapper، داده‌های ورودی از ManagerFormViewModel به مدل Manager تبدیل شده و در دیتابیس ذخیره می‌شود. این فرآیند باعث ساده‌سازی Mapping و کاهش پیچیدگی کد می‌شود. اگر داده‌ها معتبر نباشند، دوباره View به همراه خطاهای معتبرسازی نمایش داده می‌شود.

  • متد Get

public IActionResult Create()
{
PopulateGenderList();
return View();
}

  • متد Post

[HttpPost]
[ValidateAntiForgeryToken]
public async Task Create([Bind("Id,Name,Family,Gender,Age")] ManagerFormViewModel ManagerVm)
{
if (ModelState.IsValid)
{
var ManagerM = _mapper.Map(ManagerVm);
ManagerM.RegisterDate = DateTime.Now;
//ManagerM.UserName = ManagerM.Name + "" + ManagerM.Family + "" + ManagerM.Id;
_context.Add(ManagerM);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
PopulateGenderList();
return View(ManagerVm);
}

ویرایش رکورد – Edit با استفاده از AutoMapper

عملیات Edit شامل متدهای GET و POST برای عملیات Edit در ASP.NET Core است. با استفاده از AutoMapper، داده‌هایدیتابیس به ManagerFormViewModel برای نمایش در فرم ویرایش تبدیل شده و پس از تغییرات کاربر دوباره به مدل Manager مپ میشود. و در دیتابیس ذخیره می‌شود. این فرآیند باعث ساده‌سازی Mapping و مدیریت بهتر داده‌ها در فرم‌های ویرایش می‌شود. اگر خطا یا ناسازگاری رخ دهد، با پیام مناسب مدیریت می‌شود.

  • متد Get

public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var ManagerVm = await _context.managers
.Where(a=>a.Id==id)
.ProjectTo<ManagerFormViewModel>(_mapper.ConfigurationProvider)
.FirstOrDefaultAsync();
if (ManagerVm == null)
{
return NotFound();
}
PopulateGenderList();
return View(ManagerVm);
}

  • متد Post

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Name,Family,Gender,Age")] ManagerFormViewModel ManagerVm)
{
if (id != ManagerVm.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
var ManagerM = _mapper.Map<Manager>(ManagerVm);
_context.Update(ManagerM);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ManagerExists(ManagerVm.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
PopulateGenderList();
return View(ManagerVm);
}

حذف رکورد – Delete با استفاده از AutoMapper

عملیات Delete شامل متدهای GET و POST برای عملیات Delete در ASP.NET Core است. با استفاده از AutoMapper، اطلاعات مورد نظر از دیتابیس به ViewModel تبدیل شده و برای نمایش تأیید حذف به کاربر ارسال می‌شود. پس از تأیید کاربر، رکورد مربوطه از دیتابیس حذف شده و کاربر به صفحه اصلی هدایت می‌شود. این طراحی باعث مدیریت ساده‌تر عملیات حذف و جلوگیری از دسترسی‌های غیرمجاز می‌شود.

  • متد Get

public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var ManagerVm = await _context.managers.
Where(a => a.Id == id).
ProjectTo<ManagerViewModel>(_mapper.ConfigurationProvider).
FirstOrDefaultAsync();
if (ManagerVm == null)
{
return NotFound();
}
return View(ManagerVm);
}

  • متد Post

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var manager = await _context.managers.FindAsync(id);
if (manager != null)
{
_context.managers.Remove(manager);
}
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}

جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد