مقدمه
به فصل بیستم خوش آمدید! در این فصل، به دنیای کار با پایگاههای داده با استفاده از یکی از
قدرتمندترین و محبوبترین تکنولوژیهای .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 استفاده خواهیم کرد.
- پکیج اصلی ارائهدهنده (Database Provider): این پکیج شامل پیادهسازیهای
لازم برای اتصال EF Core به یک نوع پایگاه دادهی خاص است. برای SQL
Server، ما به Microsoft.EntityFrameworkCore.SqlServer
نیاز داریم.
- ابزارهای EF Core: این پکیج شامل ابزارهای خط فرمان برای انجام
کارهایی مانند ایجاد پایگاه داده و مدیریت تغییرات (migrations) است. ما به Microsoft.EntityFrameworkCore.Tools نیاز داریم.
برای نصب این پکیجها، میتوانید از کنسول پکیج منیجر در ویژوال استودیو یا .NET CLI
استفاده کنید:
Terminal
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
قدم دوم: تعریف DbContext
قلب هر برنامهای که از EF Core استفاده میکند، کلاسی است که از DbContext ارثبری میکند. این کلاس به عنوان یک "جلسه" (session) با
پایگاه داده عمل کرده و نقطهی اصلی ما برای کوئری زدن و ذخیرهسازی دادههاست.
در این کلاس، ما پراپرتیهایی از نوع DbSet<TEntity> را برای هر
"جدول" که میخواهیم با آن کار کنیم، تعریف میکنیم. هر DbSet نمایندهی یک جدول در پایگاه داده و
هر TEntity یک کلاس است که نمایندهی یک سطر در آن جدول میباشد. در این درس، ما فقط ساختار کلی
DbContext را ایجاد میکنیم و در درس بعد به تعریف مدلها خواهیم پرداخت.
MyDbContext.cs
using Microsoft.EntityFrameworkCore;
public class MyDbContext : DbContext
{
}
قدم سوم: پیکربندی DbContext
کلاس DbContext ما باید بداند که چگونه به پایگاه داده متصل شود. این کار با بازنویسی
(override) متد OnConfiguring و استفاده از یک رشتهی اتصال
(connection string) انجام میشود.
MyDbContext.cs
public class MyDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connectionString = "Server=(localdb)\\mssqllocaldb;Database=MyFirstEfCoreDb;Trusted_Connection=True;";
optionsBuilder.UseSqlServer(connectionString);
}
}
در این کد، ما متد OnConfiguring را بازنویسی کرده و به optionsBuilder میگوییم که از SQL Server (UseSqlServer) با رشتهی اتصال مشخص شده استفاده کند. این رشتهی اتصال به یک
پایگاه دادهی لوکال به نام MyFirstEfCoreDb اشاره دارد.
نکته مهم: قرار دادن رشتهی اتصال به صورت ثابت در کد یک رویهی بسیار بد است. در
یک برنامهی واقعی، شما باید این رشته را از یک منبع پیکربندی امن (مانند appsettings.json یا
متغیرهای محیطی) بخوانید.
بررسی تنظیمات: همه چیز آماده است
تا به اینجا، ما تمام قطعات لازم برای برقراری ارتباط با پایگاه داده را تنظیم کردهایم:
- پکیجهای لازم برای EF Core و ارائهدهندهی SQL Server را نصب کردهایم.
- یک کلاس DbContext سفارشی ایجاد کردهایم که به عنوان دروازهی ما به پایگاه داده عمل میکند.
- DbContext را طوری پیکربندی کردهایم که بداند به کدام پایگاه داده و چگونه متصل شود.
اکنون همه چیز برای مرحلهی بعدی، یعنی تعریف مدلهای موجودیت (Entity Models) که ساختار جداول ما
را مشخص میکنند، آماده است. در درس بعدی، این کار را انجام داده و اولین پایگاه دادهی خود را با
استفاده از EF Core ایجاد خواهیم کرد.