مقدمه
در درس گذشته، با مفاهیم پایهای ASP.NET Core Web API و نحوهی ساخت یک کنترلر ساده
آشنا شدیم. اکنون زمان آن است که این دانش را برای یک سناریوی واقعیتر و پیچیدهتر به کار بگیریم.
در این درس، ما یک وبسرویس کامل برای پایگاه دادهی معروف Northwind
خواهیم ساخت. Northwind یک پایگاه دادهی نمونه از مایکروسافت است که یک کسبوکار کوچک
فروش مواد غذایی را شبیهسازی میکند و شامل جداول مرتبطی مانند Customers، Orders، Products
و Suppliers است.
به جای تعریف دستی تمام مدلها و DbContext (رویکرد Code-First)، ما از یک رویکرد متفاوت به نام
Database-First استفاده خواهیم کرد. در این رویکرد، EF Core
میتواند یک پایگاه دادهی موجود را بررسی کرده و به صورت خودکار تمام کلاسهای موجودیت و
DbContext مورد نیاز را برای ما تولید کند. این کار فرآیند شروع کار با پایگاههای دادهی موجود
را به شدت سرعت میبخشد.
قدم اول: ایجاد پروژه و نصب پکیجها
ابتدا یک پروژهی جدید از نوع ASP.NET Core Web API ایجاد کرده و نام آن را Northwind.Api میگذاریم. سپس، پکیجهای لازم برای EF Core
را نصب میکنیم:
Terminal
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
پکیج Microsoft.EntityFrameworkCore.Design حاوی منطق لازم برای مهندسی معکوس پایگاه داده است.
قدم دوم: مهندسی معکوس پایگاه داده (Database-First)
اکنون از ابزار خط فرمان EF Core برای تولید مدل از روی یک پایگاه دادهی
Northwind موجود استفاده میکنیم. برای این کار، به یک رشتهی اتصال (connection string)
به پایگاه داده نیاز داریم. (شما میتوانید اسکریپت ساخت پایگاه دادهی Northwind را به
راحتی در اینترنت پیدا کرده و آن را بر روی نمونهی SQL Server خود اجرا کنید).
دستور dotnet ef dbcontext scaffold این کار را برای ما انجام میدهد. این دستور چندین پارامتر
میگیرد:
- رشتهی اتصال به پایگاه داده.
- نام ارائهدهندهی EF Core (در اینجا Microsoft.EntityFrameworkCore.SqlServer).
- سوئیچ -o برای مشخص کردن پوشهی خروجی برای مدلها.
- سوئیچ -c برای مشخص کردن نام DbContext که باید تولید شود.
Terminal
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Northwind;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -c NorthwindContext
پس از اجرای این دستور، EF Core به پایگاه داده متصل شده و یک پوشهی Models ایجاد
میکند که حاوی کلاسهای C# برای تمام جداول پایگاه داده (Customer.cs, Order.cs و
...) و همچنین فایل NorthwindContext.cs است.
قدم سوم: ثبت DbContext
مانند قبل، باید DbContext تولید شده را در فایل Program.cs به کانتینر تزریق وابستگی اضافه
کنیم.
Program.cs
using Northwind.Api.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<NorthwindContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("NorthwindConnection")));
فراموش نکنید که رشتهی اتصال مربوطه را نیز در فایل appsettings.json خود اضافه کنید.
قدم چهارم: ساخت کنترلر Customers
حالا که مدل و DbContext ما آماده است، میتوانیم با استفاده از همان ابزار Scaffolding که در درس
قبل دیدیم، یک کنترلر API برای مدیریت مشتریان (Customers) ایجاد کنیم.
- روی پوشهی Controllers راستکلیک کرده و Add → Controller... را انتخاب
کنید.
- گزینهی API Controller with actions, using Entity Framework را انتخاب کنید.
- برای Model class، گزینهی Customer را انتخاب کنید.
- برای Data context class، گزینهی NorthwindContext را انتخاب کنید.
- نام کنترلر را CustomersController بگذارید و روی Add کلیک کنید.
ویژوال استودیو یک کنترلر کامل با تمام اکشنهای CRUD برای موجودیت Customer تولید
میکند.
بررسی اکشن GetCustomers
اکشن GET اصلی که توسط Scaffolding تولید میشود، تمام مشتریان را برمیگرداند.
CustomersController.cs
[HttpGet]
public async Task<ActionResult<IEnumerable<Customer>>> GetCustomers()
{
return await _context.Customers.ToListAsync();
}
اگر اکنون برنامه را اجرا کرده و به آدرس /api/customers در مرورگر خود (یا با ابزاری مانند
Postman) مراجعه کنید، لیستی از تمام مشتریان پایگاه داده Northwind را در فرمت
JSON دریافت خواهید کرد. به همین سادگی، شما یک وبسرویس کاربردی برای خواندن دادهها از
یک پایگاه دادهی واقعی ساختید.