در این جلسه از آموزش ASP.NET Core به اتصال EF Core به SQL Server و MySQL خواهیم پرداخت ونحوه DB Migration در EF Core با رویکرد Code First را بررسی خواهیم کرد. اگر به خاطر داشته باشید در جلسه 45ام، وباپلیکشن خود را برای شروع کار با EF Core آماده نمودیم و NuGet پکیجهای مربوطه را نصب و یک DB Context ایجاد کردیم. در این جلسه قصد داریم به توسعه بیشتر DB Context بپردازیم و نحوه اتصال آن به پایگاهداده SQL Server و MySQL را بررسی کنیم.
Migration در EF Core چیست؟
Migration در EF Core راهی برای همگام سازی پایگاه داده و مدلهای Entity Framework با حفظ دادهها میباشد. بواسطه EF Core Migration پایگاه داده و جداول آن متناظر با EF Core Models بروزرسانی میشود.
اتصال EF Core به SQL Server
جهت اتصال یک وباپلیکشن ASP.NET Core به پایگاهداده میتوان از Entity Framework Core استفاده نمود. برای اتصال EF Core به SQL Server پس از نصب NuGet Packageهای مربوطه میبایست از services در کلاس Startup استفاده نمود. اما بهتر است Connection String درون کد برنامه قرارنگیرد. به همین منظور ما Connection String خود را درون فایل appsettings.json ذخیره خواهیم نمود. در نتیجه برای دسترسی به اطلاعات ذخیره شده در appsettings.json میبایست برای کلاس Startup یک سازنده ایجاد نمود. همچنین میبایست یک شئی از اینترفیس IConfiguration درون سازنده اینجکت نماییم.
private readonly IConfiguration Configuration;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
سپس Connection String متناسب را درون appsettings.json ایجاد میکنیم.
"ConnectionStrings": {
"CostDBConnectionSQLLocal": "server=(localdb)\\MSSQLLocalDB;database=CostDB;Trusted_Connection=true",
}
Connection String فوق جهت اتصال به SQL Server نسخه نصب شده به همراه Visual Studio و Connection String زیر جهت اتصال به SQL Server نسخه سرور میباشد.
"ConnectionStrings": {
"CostDBConnectionSQLServer": "server=.;database=CostDB;user=sa;password=goldencourses2022;Persist Security Info=False",
}
و در ادامه در متد ConfigureServices از کلاس Startup با استفاده از Services و DBContextOptions اتصال را انجام میدهیم.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContextPool<WebAppDBContext>
(options=> options.UseSqlServer(Configuration.GetConnectionString("CostDBConnectionSQLServer")));
}
اتصال EF Core به MySQL
برای اتصال EF Core به MySQL و یا هر پایگاهداده دیگر ابتدا مبایست Provider مناسب را نصب نماییم. در این جلسه چون قصد داریم از پایگاهداده MySQL استفاده نماییم، بر اساس لیست Providerهای EF Core سرویسدهنده مناسب (MySql.EntityFrameworkCore) را نصب میکنیم. سپس در فایل appsettings.json اقدام به ساختن Connection String مناسب میکنیم.
"ConnectionStrings": {
"CostDBConnectionMySQL": "server=localhost;database=CostDB;user=root;password=;Persist Security Info=False"
}
سپس سرویس مورد نظر را به صورت زیر در متد ConfigureServices از کلاس Startup تعریف میکنیم.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContextPool<WebAppDBContext>
(options=> options.UseMySQL(Configuration.GetConnectionString("CostDBConnectionMySQL")));
}
Persist Security Info و Trusted_Connection در Connection String
در صورتی که Persist Security Info در Connection String برابر با False قرارداده شود. اطلاعات حساس مانند کلمه عبور و نام کاربری درون ارتباطات باز قابل مشاهده نمیباشد. این مقدار به صورت پیشفرض False میباشد و توصیه میشود برای تمامی ارتباطات این مقدار برابر False تنظیم گردد.
همچنین Trusted_Connection و یا Integrated Security برای زمانی در Connection String استفاده میشود که قصد داشته باشیم از نام کاربری و کلمه عبور ویندوز برای SQL Server استفاده نماییم. در صورتی مقدار Trusted_Connection برابر True و یا مقدار Integrated Security برابر با True و یا SSPI قرار داده شود، این قابلیت فعال میگردد. درغیر اینصورت میبایست از نام کاربری و کلمه عبور SQL Server درون Connection String استفاده گردد.
Migration در EF Core
در واقع EF Core Migration جهت همگام سازی پایگاه داده و مدلهای Entity Framework با حفظ دادهها میباشد. بواسطه EF Core Migration پایگاه داده و جداول آن متناظر با EF Core Models بروزرسانی میشود. برای انجام Migration ابتدا باید مدلهای مورد نظر را به صورت فیلدهای DbSet در DB Context تعریف نماییم.
public class WebAppDBContext : DbContext
{
public WebAppDBContext(DbContextOptions<WebAppDBContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
}
سپس با استفاده از Package Manager Console و اجرای فرامین مربوط به Entity Framework میتوانیم عملیات Migration را انجام دهیم. در صورتی که Package Manager Console را در Visual Studio خود مشاهده نمیکنیم میتوانید آنرا از مسیر View -> Other Windows -> Package Manager Console بارگذاری نمایید.
فرامین مربوط به EF Core Migration:
- Add-Migration: این فرمان جهت ایجاد کلاس مربوط به Migration میباشد. این کلاس بر اساس DbSet های درون DBContext و مدلهای مربوطه ایجاد میشود.
- Remove-Migration: جهت حذف یک Migration استفاده میگردد و در صورت عنوان نکردن نام Migration، آخرین Migration ایجاد شده حذف میگردد.
- Update-Database: جهت همگام سازی پایگاه داده با Domain Model بر اساس Migration ایجاد شده میباشد. این فرمان تغییر مورد نظر را بروی پایگاه داده اعمال میند.
توجه داشته باشید برای اجرای فرامین ذکر شده میبایست NuGet پکیج Microsoft.EntityFrameworkCore.Tools نصب شده باشد.
در صورت نیاز به جزئیات بیشتر، میتوانید ویدئو آموزشی این جلسه را تماشا نمایید. همچنین برای آگاهی از جلسات بعدی این دوره آموزشی، ما را در اینستاگرام، تلگرام، یوتیوب و آپارات دنبال کنید. ضمنا لیست کامل جلسات در این قسمت در دسترس شما میباشد و سورس کد این جلسه را میتوانید از GitHub ما دانلود نمایید.
دانلود اسلایدهای آموزشی این جلسه از اینجا