روش Code First یکی از سه روش اصلی کار با Entity Framework (EF) در پروژههای ASP.NET Core در برنامه نویسی سمت سرور است که به برنامهنویسان این امکان را میدهد تا از طریق کد شیءگرا (Classes) پایگاه داده را تعریف و مدیریت کنند. در مقابل روشهای دیگر مانند Database First که ابتدا پایگاه داده طراحی شده و سپس به کد تبدیل میشود، در Code First ابتدا مدلهای برنامهنویسی ایجاد میشوند و سپس با استفاده از این مدلها، جداول پایگاه داده به طور خودکار ساخته میشوند.
در این مقاله، به صورت گام به گام و با ذکر مثالهای عملی، روش Code First در ASP.NET Core توضیح داده خواهد شد. این مقاله مناسب برنامهنویسانی است که به دنبال درک عمیقتر از روش Code First هستند و میخواهند با کاربردهای عملی آن آشنا شوند.
Entity Framework Core چیست؟
Entity Framework Core (EF Core) یکی از ابزارهای ORM (Object-Relational Mapping) است که برای کار با پایگاههای داده رابطهای در محیط .NET استفاده میشود. EF Core به برنامهنویسان این امکان را میدهد که دادهها را بهصورت شیءگرا مدیریت کنند، بدون اینکه نیاز باشد به زبان SQL مستقیم کدنویسی کنند. EF Core از تکنیکهای مختلفی مانند Code First و Database First پشتیبانی میکند، که در این مقاله به بررسی عمیقتر روش Code First خواهیم پرداخت.
روش Code First چیست؟
Code First به معنی ایجاد ابتدا مدلهای داده (کلاسها) در کد برنامهنویسی است. سپس EF Core به طور خودکار با استفاده از این کلاسها و قواعد خاص خود، جداول مربوط به این کلاسها را در پایگاه داده ایجاد میکند. این روش برای پروژههایی مناسب است که ابتدا تمرکز بر روی طراحی مدلهای دادهای در کد است و نیازی به پایگاه داده از قبل ساخته شده وجود ندارد. در کل مزایای استفاده روش Code First عبارتند از:
- سادگی در طراحی مدلها: برنامهنویسان میتوانند به جای کار با SQL و دستورات پیچیده، از شیءگرا بودن کدها استفاده کنند و به سادگی کلاسها را برای مدیریت دادهها تعریف کنند.
- همگامسازی خودکار: EF Core به طور خودکار جداول پایگاه داده را با کلاسهای تعریف شده در کد همگام میکند.
- قابلیت Migration: در صورت نیاز به تغییر در ساختار پایگاه داده، میتوان از ویژگی Migration استفاده کرد تا تغییرات به راحتی و بدون از دست رفتن دادههای قبلی اعمال شوند.
مراحل پیادهسازی Code First در ASP.NET Core
برای پیادهسازی Code First در یک پروژه ASP.NET Core، مراحل زیر را به ترتیب دنبال خواهیم کرد.
گام ۱: ایجاد پروژه ASP.NET Core
ابتدا یک پروژه ASP.NET Core ایجاد کنید. این پروژه باید از نوع Web Application باشد و از ASP.NET Core MVC استفاده کند.
به پروژه خود یک نام بدهید، به عنوان نمونه نام SampleCodeFirstInDotNETCoreMVC داده شده و مکانی که پروژه در آن ذخیره شود و روی ایجاد Create کلیک کنید.
حال، بایستی نسخه چارچوب و الگوی پروژه MVC یعنی Web Application Mode — View — Controller را انتخاب کنید:
حال نوبت به نصب برخی از بستههای Entity Framework Core هست. بسته ها و پکیج های مورد نیاز را از NuGet Package Manager برای انجام عملیات نصب میکنیم. برای این کار از Solution روی وابستگی کلیک راست کنید، Manage NuGet Packages را انتخاب کنید و تب Browse را انتخاب کنید و سپس Microsoft.EntityFrameworkCore.SqlServer را در کادر جستجو وارد کنید، Latest Stable Version و Install را انتخاب کنید.
اکنون Microsoft.EntityFrameworkCore.Tools را همانند مراحل بالا نصب کنید.
گام ۲: تعریف مدلهای داده
مدلهای داده در Code First همان کلاسهایی هستند که نماینده جداول در پایگاه داده خواهند بود. به عنوان مثال، فرض کنید که میخواهیم یک مدل برای موجودیت کاربر (User) تعریف کنیم. برای این کار، کلاس جدیدی با نام User اضافه کنید، با استفاده از فولدر Models کلیک راست کرده و Add Class را انتخاب کنید.
کدهای زیر را درکلاس User قرار می دهیم:
public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } }
هر خاصیت کلاس User به یک ستون در جدول پایگاه داده تبدیل خواهد شد. Id به عنوان کلید اصلی (Primary Key) به طور خودکار توسط EF Core شناسایی میشود.
گام ۳: ایجاد کلاس Context
کلاس DbContext نقش مهمی در EF Core دارد. این کلاس ارتباط بین مدلها و پایگاه داده را برقرار میکند. برای ایجاد DbContext، یک کلاس جدید به نام AppDbContext ایجاد کنید و آن را از DbContext ارثبری کنید:
public class AppDbContext : DbContext { public DbSet<User> Users { get; set; } public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } }
کلاس DbSet نشاندهنده مجموعهای از موجودیتهای User است که EF Core از آن برای ایجاد و مدیریت جداول پایگاه داده استفاده میکند.
گام ۴: تنظیمات اتصال به پایگاه داده
اکنون باید اطلاعات مربوط به پایگاه داده را در فایل appsettings.json تنظیم کنید. این اطلاعات شامل نام سرور و دیتابیس خواهد بود. در فایل appsettings.json، بخش زیر را اضافه کنید:
"ConnectionStrings": { "DefaultConnection": "Server=.;Database=CodeFirstDB;Trusted_Connection=True;" }
سپس در فایل Startup.cs یا Program.cs بسته به نسخه ASP.NET Core، تنظیمات DbContext را اضافه کنید:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); }
گام ۵: ایجاد پایگاه داده (Migration)
پس از تنظیمات، باید پایگاه داده را با استفاده از Migrationها ایجاد کنید. Migrationها برای مدیریت تغییرات در مدلهای داده و پایگاه داده استفاده میشوند. کنسول Package Manager را از منوی Tools باز کنید و پروژه پیشفرض را که میخواهید برای آن کد انتقال ایجاد کنید، انتخاب کنید. ابتدا دستور زیر را اجرا کنید تا اولین Migration ایجاد شود:
dotnet ef migrations add InitialCreate
این دستور یک Migration جدید با نام InitialCreate ایجاد میکند که شامل دستوراتی برای ایجاد جدول Users است. سپس دستور زیر را اجرا کنید تا پایگاه داده ایجاد شود:
dotnet ef database update
با اجرای این دستور، EF Core به طور خودکار جداول مربوطه را در پایگاه داده میسازد.
گام ۶: کار با دادهها
اکنون که پایگاه داده و جدولها ایجاد شدهاند، میتوانید با دادهها کار کنید. برای این کار از CRUD (Create, Read, Update, Delete) استفاده میکنیم.
ایجاد داده جدید
برای افزودن یک کاربر جدید، میتوانید کد زیر را در کنترلر خود قرار دهید:
public class UserController : Controller { private readonly AppDbContext _context; public UserController(AppDbContext context) { _context = context; } public IActionResult Create() { var user = new User { Name = "John Doe", Email = "johndoe@example.com", Password = "123456" }; _context.Users.Add(user); _context.SaveChanges(); return Ok("User created successfully"); } }
خواندن دادهها
برای دریافت لیست کاربران میتوانید از روش زیر استفاده کنید:
public IActionResult Index() { var users = _context.Users.ToList(); return View(users); }
بروزرسانی دادهها
برای بروزرسانی یک کاربر، کد زیر را استفاده کنید:
public IActionResult Update(int id) { var user = _context.Users.Find(id); if (user != null) { user.Name = "Updated Name"; _context.SaveChanges(); } return Ok("User updated successfully"); }
حذف دادهها
برای حذف یک کاربر:
public IActionResult Delete(int id) { var user = _context.Users.Find(id); if (user != null) { _context.Users.Remove(user); _context.SaveChanges(); } return Ok("User deleted successfully"); }
مدیریت Migrationها در EF Core
در طول توسعه پروژه، ممکن است نیاز داشته باشید که مدلهای داده را تغییر دهید. برای این کار، میتوانید از Migrationهای جدید استفاده کنید. به عنوان مثال، فرض کنید میخواهید فیلد جدیدی به مدل User اضافه کنید:
public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } public DateTime DateOfBirth { get; set; } // فیلد جدید }
پس از اعمال تغییرات، باید یک Migration جدید ایجاد کنید:
dotnet ef migrations add AddDateOfBirthToUser
سپس دستور update database را اجرا کنید تا تغییرات در پایگاه داده اعمال شود:
dotnet ef database update
نتیجهگیری
روش Code First در Entity Framework Core یک روش قدرتمند برای توسعه برنامههای مبتنی بر داده است. با این روش، شما میتوانید ابتدا مدلهای دادهای خود را در کد تعریف کنید و سپس پایگاه داده به صورت خودکار ایجاد و مدیریت شود. با استفاده از قابلیتهای EF Core مانند Migration و Fluent API، میتوانید کنترل کاملی بر پایگاه داده خود داشته باشید و به سرعت با تغییرات مورد نیاز همگام شوید. این روش برای پروژههایی که نیاز به انعطافپذیری بالا و توسعه سریع دارند، بسیار مناسب است.