۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

رمزگشایی از رویکرد کد اول در EF Core

از رویکرد Code First در Entity Framework Core برای ایجاد مدل داده برای برنامه خود بر اساس موجودیت های دامنه آن در ASP.NET Core استفاده کنید.

از رویکرد Code First در Entity Framework Core برای ایجاد مدل داده برای برنامه خود بر اساس موجودیت های دامنه آن در ASP.NET Core استفاده کنید.

هنگامی که ما برنامه‌های کاربردی سازمانی مبتنی بر پایگاه داده می‌سازیم، معمولاً می‌خواهیم مدل‌های موجودیت، DbContext و منطق اولیه‌سازی و مهاجرت پایگاه داده را جدا کنیم تا یک معماری تمیز حفظ شود. ما می توانیم این کار را با استفاده از رویکرد Code First در Entity Framework Core انجام دهیم.

این مقاله بحثی از رویکرد Code First در EF Core با مثال‌های کد برای نشان دادن مفاهیم ارائه می‌کند. برای استفاده از نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه ASP.NET Core Web API در Visual Studio ایجاد کنید

برای ایجاد یک پروژه ASP.NET Core Web API در Visual Studio 2022، مراحل ذکر شده در زیر را دنبال کنید.

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. بسته به تنظیمات برگزیده شما، به صورت اختیاری، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره “اطلاعات اضافی” که در ادامه نشان داده شده است، “NET 8.0 (Long Term Support)” را به عنوان نسخه چارچوب انتخاب کنید و مطمئن شوید که کادر “Use controllers” علامت زده شده است. ما از حداقل API در این پروژه استفاده نخواهیم کرد.
  9. در جای دیگر پنجره «اطلاعات اضافی»، «نوع احراز هویت» را روی «هیچ‌کدام» (پیش‌فرض) بگذارید و مطمئن شوید که کادرهای «فعال کردن پشتیبانی باز API»، «پیکربندی برای HTTPS» و «فعال کردن داکر» را انتخاب کنید. کنترل نشده باقی بماند. ما در اینجا از هیچ یک از این ویژگی ها استفاده نخواهیم کرد.
  10. روی ایجاد کلیک کنید.
چرا باید از داکر و کانتینرها استفاده کنید؟

ما از این پروژه ASP.NET Core Web API برای کار با EF Core و رویکرد Code First در بخش‌های زیر استفاده خواهیم کرد.

ایجاد یک مدل موجودیت در EF Core

EF Core مایکروسافت یک نقشه‌بردار پایگاه داده شی است که دسترسی به داده‌ها را برای برنامه‌های NET Core ساده می‌کند. EF Core با پایگاه‌های داده رابطه‌ای، پایگاه‌های داده غیررابطه‌ای و حتی پایگاه‌های داده درون حافظه کار می‌کند و به ما اجازه می‌دهد تا برای انجام عملیات CRUD (ایجاد، خواندن، به‌روزرسانی، حذف) کد بنویسیم که از اشیاء دات‌نت استفاده می‌کنند. با استفاده از EF Core، مجبور نیستیم مستقیماً با ارائه‌دهنده پایگاه داده زیربنایی تعامل داشته باشیم.

EF Core از سه رویکرد مختلف برای ایجاد مدل موجودیت پشتیبانی می‌کند: Code First، Model First، و Database First.

رویکرد Code First در EF Core

در رویکرد Code First، مدل موجودیت با استفاده از کد بدون هیچ طرح پایگاه داده از قبل موجود تعریف می شود. توسعه دهندگان کلاس های دامنه را می نویسند و نگاشت بین آن کلاس ها و پایگاه داده را با استفاده از ویژگی ها، API های روان یا قراردادها پیکربندی می کنند. سپس EF Core طرح واره پایگاه داده را بر اساس مدل کد تعریف شده ایجاد می کند. رویکرد Code First به شما اجازه می دهد تا روابط پیچیده را با استفاده از کد بیان کنید. اغلب زمانی ترجیح داده می شود که طرح پایگاه داده در دسترس نباشد.

رویکرد مدل اول در EF Core

در رویکرد Model First، مدل موجودیت با استفاده از یک ابزار طراحی بصری، مانند Entity Framework Designer در ویژوال استودیو، طراحی می‌شود. با طراح، توسعه دهندگان می توانند به صورت بصری موجودیت ها، روابط و سایر جنبه های یک مدل داده را بدون نوشتن یک خط کد ایجاد کنند. هنگامی که مدل را تعریف کردید، EF Core کد را تولید می کند که شامل کلاس های موجودیت و پیکربندی های نقشه برداری می شود. بعداً می‌توانید کد را گسترش دهید تا منطق کسب و کار یا سفارشی‌سازی‌ها را در صورت لزوم اضافه کنید. Model First زمانی می تواند مفید باشد که غیر توسعه دهندگان در تعریف مدل داده دخالت داشته باشند یا زمانی که یک طرح پایگاه داده موجود نیاز به مهندسی معکوس دارد.

نقد و بررسی: CodeWhisperer، Bard و Copilot X

رویکرد اول پایگاه داده در EF Core

در رویکرد Database First، یک طرح پایگاه داده موجود برای تولید مدل موجودیت با استفاده از ابزارهای EF Core استفاده می‌شود. این ابزارها می توانند کلاس های موجودیت و پیکربندی های نقشه برداری را با مهندسی معکوس طرح پایگاه داده ایجاد کنند. همچنین امکان همگام سازی تغییرات طرحواره پایگاه داده با مدل موجودیت وجود دارد. هنگامی که توسعه دهندگان از رویکرد Database First استفاده می کنند، کنترل بیشتری بر ساختار پایگاه داده به دست می آورند اما کنترل کمتری بر مدل کد دارند. این رویکرد هنگام ادغام EF Core با پایگاه داده موجود یا کار با پایگاه های داده قدیمی انتخاب خوبی است.

استفاده از رویکرد Code First در EF Core

قبل از اینکه بتوانید از EF Core در برنامه خود استفاده کنید، باید بسته Microsoft.EntityFrameworkCore را به پروژه خود اضافه کنید. برای انجام این کار، پروژه را در پنجره Solution Explorer انتخاب کنید، سپس کلیک راست کرده و “Manage NuGet Packages” را انتخاب کنید. در پنجره NuGet Package Manager، بسته Microsoft.EntityFrameworkCore را جستجو کرده و آن را نصب کنید.

همچنین، می‌توانید بسته را از طریق کنسول NuGet Package Manager با وارد کردن دستور زیر نصب کنید.

PM> Install-Package Microsoft.EntityFrameworkCore

در صورت عدم وجود این موضوع، بیایید اکنون یک مدل داده با استفاده از رویکرد Code First در EF Core ایجاد کنیم. ما این کار را در پنج مرحله انجام خواهیم داد: کلاس های دامنه را تعریف کنید، کلاس DbContext ایجاد کنید، DbContext را پیکربندی کنید، DbContext را ثبت کنید و در نهایت پایگاه داده را انتقال دهید.

مرحله ۱: کلاس های دامنه خود را تعریف کنید

با ایجاد کلاس های دامنه که با موجودیت های موجود در برنامه شما مطابقت دارند، شروع کنید. قطعه کد زیر یک کلاس Author و اعضای آن را تعریف می کند.

public class Author
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
}

مرحله ۲: کلاس DbContext را ایجاد کنید

کلاسی ایجاد کنید که کلاس DbContext EF Core را گسترش دهد. این کلاس زمینه پایگاه داده شما را نشان می دهد و دروازه ای برای تمام ارتباطات بین برنامه شما و پایگاه داده است. به عبارت دیگر، کلاس DbContext به عنوان نقطه ورودی برای انجام عملیات CRUD روی داده ها عمل می کند.

public class AuthorDbContext : DbContext
{
    public DbSet<Author> Authors { get; set; }
    public AuthorDbContext(DbContextOptions<AuthorDbContext> options)
        : base(options)
    {
    }
}

به نحوه ارسال نمونه DbContextOptions به سازنده این کلاس توجه کنید. این نمونه شامل ارائه دهنده پایگاه داده و اطلاعات رشته اتصال است که برنامه شما برای اتصال به پایگاه داده نیاز دارد.

پیشنهاد جاوا تأخیر GC را کاهش می دهد

مرحله ۳: پیکربندی DbContext

در مرحله بعد روش OnModelCreating کلاس AuthorDbContext خود را لغو کنید تا مدل و روابط آن را همانطور که در قطعه کد زیر نشان داده شده است پیکربندی کنید.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Author>()
        .Property(p => p.FirstName).IsRequired().HasMaxLength(50);
}

مرحله ۴: ثبت DbContext

اکنون AuthorDbContext را با ظرف تزریق وابستگی با استفاده از قطعه کد زیر ثبت کنید. این به برنامه شما اجازه می دهد تا در طول چرخه عمر خود به نمونه DbContext دسترسی داشته باشد.

builder.Services.AddDbContext<AuthorDbContext>(options =>     
options.UseSqlServer(Configuration.GetConnectionString("AuthorDb")));

مرحله ۵: پایگاه داده را انتقال دهید

در این مرحله نهایی، ما از ویژگی مهاجرت EF Core برای ایجاد یا به روز رسانی طرح پایگاه داده بر اساس مدل داده خود استفاده می کنیم. برای انجام این کار، دستور زیر را در پنجره EF Core CLI یا کنسول NuGet Package Manager اجرا کنید.

dotnet ef migrations add InitialMigration

و این تنها کاری است که باید انجام دهید تا برنامه خود را با استفاده از رویکرد Code First راه اندازی و اجرا کنید.

هر یک از سه رویکرد برای ایجاد یک مدل داده در EF Core جوانب مثبت و منفی خود را دارد. شما باید بسته به شرایط، رویکرد مناسب را برای برنامه خود انتخاب کنید. من در مورد دو رویکرد دیگر، یعنی Model First و Database First، در پست‌های بعدی اینجا به تفصیل بحث خواهم کرد.