عملیات CRUD در Asp.net Core

عملیات CRUD در Asp.net Core

خواندن این مطلب

6 دقیقه

زمان میبرد!

ایجاد CRUD برای یک سایت یک بخش بسیار مهم است اگر شما قصد داشته باشید یک ادمین برای مدیریت یک سایت ایجاد بکنید نیازمند آن هستید که CRUD را پیاده سازی کرده باشید؛ حال اگر برنامه نویس Asp.net Core هستید مقاله عملیات CRUD در Asp.net Core به شما در این زمینه کمک میکند اما قبل از آن باید به ایجاد دیتابیس و ارتباط با SQL در ASP.NET Core نیز مسلط باشید برای برقراری ارتباط بین پروژه و بانک اطلاعاتی؛ این مقاله به شما در ایجاد CRUD کمک میکند.

عملیات CRUD چیست

عملیات CRUD یک الگوی مهم در برنامه‌نویسی وب است که از طریق آن، عملیات پایه‌ای روی داده‌ها انجام می‌شود. CRUD مخفف Create، Read، Update و Delete است، که هر کدام از این عملیات‌ها یک عمل اصلی روی داده‌ها را نمایان می‌کند:

۱.Create (ساختن): این عملیات به اضافه کردن داده جدید به پایگاه داده یا سیستم اشاره دارد. مثلاً، ایجاد رکورد یا شیء جدید در پایگاه داده.

۲.Read (خواندن): این عملیات برای خواندن یا دریافت داده‌ها از پایگاه داده یا سیستم مورد استفاده قرار می‌گیرد. به‌عنوان مثال، خواندن اطلاعات یک کاربر از پایگاه داده.

۳.Update (به‌روزرسانی): این عملیات برای تغییر داده‌ها موجود در پایگاه داده یا سیستم استفاده می‌شود. به‌عنوان مثال، به‌روزرسانی اطلاعات یک کاربر (مثلاً تغییر آدرس ایمیل یا شماره تلفن).

۴.Delete (حذف): این عملیات برای حذف داده‌ها از پایگاه داده یا سیستم مورد استفاده قرار می‌گیرد. به‌عنوان مثال، حذف یک رکورد یا شیء از پایگاه داده.

ایجاد عملیات CRUD با Controller

برای اینکه بتوانیم عملیات CRUD را پیاده سازی کنیم نیازمند این هستیم که به Context پروژه دسترسی داشته باشیم تا بتوانیم از این طریق عملیات خود را روی دیتابیس انجام دهیم؛ در این مقاله یک Model به نام Product داریم و میخواهیم برای محصولات خود عملیات CRUD را پیاده سازی بکنیم.

در مرحله اول یک Controller ایجاد میکنیم تا کدهای خود را در آن بنویسیم بعد از ایجاد Controller نوبت این است که Constructor را ایجاد بکنید تا بتوانید از Context استفاده بکنید؛ در این مرحله باید در قطعه کد زیر را بنویسید حالا میتوانید روی Context خود عملیات CRUD را انجام بدهید.

				
					private readonly CRUDContext _context;

public ProductsController(CRUDContext context)
{
    _context = context;
}
				
			

نمایش اطلاعات در صفحه Index

حالا که به دیتابیس دسترسی داریم نوبت نمایش اطلاعات محصولات در صفحه اصلی یعنی Index است که با قطعه کد زیر میتوانیم این کار را انجام دهیم.

				
					[HttpGet]
public async Task<IActionResult> Index()
{
    var model = await _context.Products.ToListAsync();
    return View(model);
}
				
			

در کد Index یک کوئری به روی دیتابیس انجام داده‌ایم وقتی از ToList استفاده میکنیم یعنی هرچی داخل آن جدول باشد که اینجا منظور ما محصولات است به نمایش بگذار و در ادامه model را به سمت View فرستادیم تنها یک مرحله تا اتمام ایجاد Index فاصله داریم برای اینکه بتوانیم بر روی Product یک حلقه بزنیم باید کد زیر را در View مربوط به Index قرار دهیم.

				
					@model IEnumerable<NonevisanCRUD.Web.Models.Product>
				
			

به این شکل میتوان مدل صفحه را مشخص کرد که یعنی یک لیست از محصولات به نمایش بگذار.

ثبت اطلاعات با عملیات Create

اگر بخواهیم یک پنل مدیریت کامل برای سایت خود پیاده سازی بکنیم بعد نمایش اطلاعات در صفحه داشبورد باید به سراغ صفحه ای به نام Create برویم تا با استفاده از آن بتوانیم محصولا جدید به سایت اضافه بکنیم که ابتدا باید وارد Controller شوید و کد زیر را اضافه بکنید.

				
					[HttpGet]
public IActionResult Create()
{
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Product product)
{
    if (ModelState.IsValid)
    {
        _context.Add(product);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(product);
}
				
			

در Index ما فقط از HttpGet استفاده میکردیم زیرا Get برای نمایش استفاده میشود اما در ایجاد محصول جدید HttpPost هم اضافه شده و دلیل این اتفاق هم این است که برای نمایش صفحه یا همان View باید از Get استفاده بکنیم ولی برای ثبت و ارسال اطلاعات از Post به همین علت چون ساخت محصول جدید هم احتیاج به نمایش دارد هم ارسال اطلاعات ما باید از هر دو استفاده بکنیم در اینجا HttpGet صرفا برای ساخت و نمایش صفحه ایجاد محصولات است که به شکل زیر است.

صفحه ایجاد محصول جدید

در اینجا تنها کاربرد Get برای ایجاد و نمایش همین صفحه و Form است حالا نوبت Post است؛ در اینجا با ModelState.IsValid بررسی میکنیم که کاربر تمام اطلاعات لازم را پر کرده باشد و بخشی را خالی رها نکرده باشد و حال که مطمعن شدیم Form به شکل کامل پر شده به ایجاد محصول میپردازیم با استفاده از Add میتوانیم محصولی که در ورودی با نام product گرفتیم را اضافه بکنیم و در ادامه آن را با دستور SaveChangesAsync ذخیره میکنیم و در نهایت کاربر را به صفحه اصلی هدایت میکنیم.

حال در View لازم نیست یک لیست را مدل صفحه قرار دهیم اینجا باید کد زیر را در صفحه View وارد بکنیم.

				
					@model NonevisanCRUD.Web.Models.Product
				
			

ویرایش اطلاعات با عملیات Update

در عملیات Create مشاهده کردید که هم از Get استفاده کردیم هم از Post در Update هم به همین شکل است که باید این کار را بکنیم اما قصد داریم در اینجا متفاوت عمل کنیم قرار است وقتی کاربر وارد صفحه ویرایش یک محصول میشود اطلاعات قبلی محصول را بتواند مشاهده کند که به شکل زیر میشود.

ویرایش محصول در عملیات Crud

برای اینکه در Get که برای نمایش است بخواهیم این اطلاعات را ارائه دهیم باید با استفاده از دستور FindAsync استفاده بکنیم تا بتوانیم با ID محصول تشخیص دهیم داریم کدام Product را ویرایش میکنیم پس در Get باید کد زیر را بنویسیم.

				
					[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
    if (id == null || _context.Products == null)
    {
        return NotFound();
    }

    var product = await _context.Products.FindAsync(id);
    if (product == null)
    {
        return NotFound();
    }
    return View(product);
}
				
			

در ابتدا بررسی میکنیم که آیا محصولی با آیدی ورودی وجود دارد یا نه بعد محصول را Find میکنیم و درون یک متغیر میریم برای بررسی اینکه آیا چنین نحصولی وجو دارد یا خیر بعد که همه این کار ها را انجام دادیم و null دریافت نکردیم یعنی یک محصول با مشخصات خواسته شده وجود دارد پس آن را به سمت View میفرستیم تا اطلاعات در Form نمایش داده شود حال نوبت Post است که به شکل زیر پیاده سازی میشود.

				
					[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, Product product)
{
    if (id != product.Id)
    {
        return NotFound();
    }

    if (ModelState.IsValid)
    {
        _context.Update(product);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(product);
}
				
			

در این بخش از عملیات CRUD در Asp.net Core به سراغ متد Post ویرایش میرویم در ابتدا با یک دستور شرطی بررسی میکنیم که آیا محصولی با آیدی مورد نظر وجود دارد یا خیر در ادامه با یک if کاربر را مجبور میکنیم تمام اطلاعات ضروری را تکمیل بکند و حال که مطمعن شدیم تمام بخش های محصول تکمیل است و هیچ گزینه‌ای خالی نیست محصولی که دریافت کردیم را ویرایش و ذخیره میکنیم و در نیاهت کاربر را به صفحه اصلی هدایت میکنیم.

نمایش اطلاعات با عملیات Detail

یکی از بخش های عملیات CRUD در Asp.net Core نمایش اطلاعات در Detail است در این قسمت ما فقط به Get نیاز داریم زیرا فقط قصد داریم اطلاعات محصول انتخاب شده را نمایش دهیم پس به شکل زیر عمل میکنیم.

				
					[HttpGet]
public async Task<IActionResult> Details(int? id)
{
    if (id == null || _context.Products == null)
    {
        return NotFound();
    }

    var product = await _context.Products.FirstOrDefaultAsync(m => m.Id == id);
    if (product == null)
    {
        return NotFound();
    }

    return View(product);
}
				
			

در مرحله اول بررسی میکنیم که آیا محصولی با ID مشخص شده وجود دارد یا خیر اگر وجود داشته باشد آن را توسط FirstOrDefaultAsync دریافت میکنیم توسط ID و به ویو ارسال میکنیم.

حذف اطلاعات با عملیات Delete

آخرین عملیات حذف است که به Get و Post همزمان نیاز دارد چرا که قصد داریم وقتی کاربر خواست اقدام به حذف یک محصول بکند وارد صفحه جدید شود و از او سوالی پرسیده شود مبنی بر اینکه آیا از حذف محصول مطمعن است یا خیر که به شکل زیر است.

حذف محصول در عملیات CRUD

در اینجا ابتدا کاربر وارد صفحه حذف محصول میشود پس نیازمند این هستیم تا Get را برای نمایش اطلاعات پیاده سازی بکنیم برای کدنویسی این بخش باید به شکل زیر عمل بکنید.

				
					[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
    if (id == null || _context.Products == null)
    {
        return NotFound();
    }

    var product = await _context.Products
        .FirstOrDefaultAsync(m => m.Id == id);
    if (product == null)
    {
        return NotFound();
    }

    return View(product);
}
				
			

در حذف هم مانند تمام بخش های دیگه باید بررسی کنیم که آیا محصولی با آیدی وارد شده برای Delete وجود دارد یا خیر تا در مرحله بعدی با FirstOrDefaultAsync اقدام به پیدا کردن محصول کنیم اگر محصول موجود نباشه NotFound404 نمایش داده میشه و در غیر این صورت وارد صفحه حذف محصول میشوید؛ حالا که وارد صفحه جدید شدیم نوبت به پیاده سازی متد Post برای حذف کامل محصول است که باید به شکل زیر عمل کنید.

				
					[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id)
{
    if (_context.Products == null)
    {
        return NotFound();
    }
    var product = await _context.Products.FindAsync(id);
    if (product != null)
    {
        _context.Products.Remove(product);
    }
    
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(Index));
}
				
			

در ابتدای این متد هم به بررسی موجود بودن محصول میپردازیم و در ادامه که تمام این گزینه ها را بررسی کردیم اقدام به حذف محصول میکنیم که دستور Remove این کار را برای ما انجام میدهد و بهش product را میدهیم که با استفاده از FindAsync آن را پیدا کردیم تا اقدام به حذف بکند و مرحله آخر هم ذخیره سازی با دستور SaveChangesAsync است و پس از آن کاربر را به داشبورد هدایت میکنیم.

تا به اینجا یاد گرفتید با استفاده از Controller به پیاده سازی عملیات CRUD در Asp.net Core بپردازید اگر سوال یا مشکلی در خصوص این مقاله داشتید در نظرات مطرح نمایید.

به مقاله امتیاز دهید

درباره نویسنده



نظرات کاربران



  • آواتار علیرضا بیات
    علیرضا بیات
    مهمان

    سلام وقت بخیر
    عملیات CRUD رو در RazorPage چطوری باید پیاده سازی بکنم.

    • آواتار محمد مهدی زارع
      محمد مهدی زارع
      مدیر سایت

      سلام کاربر عزیز وقت بخیر
      بزودی مقاله بروزرسانی میشود و RazorPage هم اضافه میشود.

دیدگاهتان را بنویسید

مطالب مرتبط