مقدمه

به فصل بیستم خوش آمدید! در این فصل، به دنیای کار با پایگاه‌های داده با استفاده از یکی از قدرتمندترین و محبوب‌ترین تکنولوژی‌های .NET یعنی Entity Framework Core (EF Core) قدم می‌گذاریم. EF Core یک Object-Relational Mapper (O/RM) مدرن، سبک، قابل توسعه و چندپلتفرمی است. O/RM به ما اجازه می‌دهد تا با پایگاه داده‌ی خود از طریق اشیاء و کلاس‌های C# تعامل داشته باشیم، به جای اینکه مجبور به نوشتن کدهای SQL خام باشیم. این کار فرآیند توسعه را به شدت سرعت بخشیده، پیچیدگی را کاهش داده و به ما اجازه می‌دهد تا از تمام قدرت زبان C#، از جمله LINQ، برای کوئری زدن به داده‌ها استفاده کنیم.

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

قدم اول: نصب پکیج‌های NuGet

برای شروع کار با EF Core، باید چند پکیج NuGet را به پروژه‌ی خود اضافه کنیم. پکیج‌های مورد نیاز به نوع پایگاه داده‌ای که می‌خواهیم از آن استفاده کنیم، بستگی دارد. ما در این مثال از SQL Server استفاده خواهیم کرد.

  1. پکیج اصلی ارائه‌دهنده (Database Provider): این پکیج شامل پیاده‌سازی‌های لازم برای اتصال EF Core به یک نوع پایگاه داده‌ی خاص است. برای SQL Server، ما به Microsoft.EntityFrameworkCore.SqlServer نیاز داریم.
  2. ابزارهای EF Core: این پکیج شامل ابزارهای خط فرمان برای انجام کارهایی مانند ایجاد پایگاه داده و مدیریت تغییرات (migrations) است. ما به Microsoft.EntityFrameworkCore.Tools نیاز داریم.

برای نصب این پکیج‌ها، می‌توانید از کنسول پکیج منیجر در ویژوال استودیو یا .NET CLI استفاده کنید:

Copy Icon Terminal
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

قدم دوم: تعریف DbContext

قلب هر برنامه‌ای که از EF Core استفاده می‌کند، کلاسی است که از DbContext ارث‌بری می‌کند. این کلاس به عنوان یک "جلسه" (session) با پایگاه داده عمل کرده و نقطه‌ی اصلی ما برای کوئری زدن و ذخیره‌سازی داده‌هاست.

در این کلاس، ما پراپرتی‌هایی از نوع DbSet<TEntity> را برای هر "جدول" که می‌خواهیم با آن کار کنیم، تعریف می‌کنیم. هر DbSet نماینده‌ی یک جدول در پایگاه داده و هر TEntity یک کلاس است که نماینده‌ی یک سطر در آن جدول می‌باشد. در این درس، ما فقط ساختار کلی DbContext را ایجاد می‌کنیم و در درس بعد به تعریف مدل‌ها خواهیم پرداخت.

Copy Icon MyDbContext.cs
using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    // We will add our DbSet properties here in the next lesson.
    // public DbSet Products { get; set; }
}

قدم سوم: پیکربندی DbContext

کلاس DbContext ما باید بداند که چگونه به پایگاه داده متصل شود. این کار با بازنویسی (override) متد OnConfiguring و استفاده از یک رشته‌ی اتصال (connection string) انجام می‌شود.

Copy Icon MyDbContext.cs
public class MyDbContext : DbContext
{
    // DbSet properties go here...

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // A typical SQL Server connection string.
        // In a real app, this should come from a configuration file.
        string connectionString = "Server=(localdb)\\mssqllocaldb;Database=MyFirstEfCoreDb;Trusted_Connection=True;";

        // Configure the context to use SQL Server with the specified connection string.
        optionsBuilder.UseSqlServer(connectionString);
    }
}

در این کد، ما متد OnConfiguring را بازنویسی کرده و به optionsBuilder می‌گوییم که از SQL Server (UseSqlServer) با رشته‌ی اتصال مشخص شده استفاده کند. این رشته‌ی اتصال به یک پایگاه داده‌ی لوکال به نام MyFirstEfCoreDb اشاره دارد.

نکته مهم: قرار دادن رشته‌ی اتصال به صورت ثابت در کد یک رویه‌ی بسیار بد است. در یک برنامه‌ی واقعی، شما باید این رشته را از یک منبع پیکربندی امن (مانند appsettings.json یا متغیرهای محیطی) بخوانید.

بررسی تنظیمات: همه چیز آماده است

تا به اینجا، ما تمام قطعات لازم برای برقراری ارتباط با پایگاه داده را تنظیم کرده‌ایم:

  1. پکیج‌های لازم برای EF Core و ارائه‌دهنده‌ی SQL Server را نصب کرده‌ایم.
  2. یک کلاس DbContext سفارشی ایجاد کرده‌ایم که به عنوان دروازه‌ی ما به پایگاه داده عمل می‌کند.
  3. DbContext را طوری پیکربندی کرده‌ایم که بداند به کدام پایگاه داده و چگونه متصل شود.

اکنون همه چیز برای مرحله‌ی بعدی، یعنی تعریف مدل‌های موجودیت (Entity Models) که ساختار جداول ما را مشخص می‌کنند، آماده است. در درس بعدی، این کار را انجام داده و اولین پایگاه داده‌ی خود را با استفاده از EF Core ایجاد خواهیم کرد.