نحوه Migration با Entity Framework و SQL LocalDB

sqlserver localdb

ایجاد و Migration دیتابیس (پایگاه داده) SQL Server به دو روش اصلی انجام می شود. در هر دو روش شما می توانید دیتابیس خود را ایجاد کرده و جداول آن را بسازید، حذف کنید یا ویرایش نمایید.

روش Database First

Database First رایج ترین روش در هنگام کار با یک پایگاه داده موجود است.

در این مورد، زمانی که پایگاه داده را در پروژه خود می سازید، یک فایل EDMX (Entity Data Model XML) ایجاد می شود و شامل تمام مدل های داده است. در این روش در واقع شما در نرم افزار SQL Server اقدام به ساخت دیتابیس و جداول آن می کنید و روابط و مشخصات جدول ها در SQL Server انجام می گردد. سپس دیتابیس ساخته شده را به پروژه خود اضافه می کنید.

روش Code First

با رویکرد Code First، ابتدا مدل های داده را ایجاد می کنید، و سپس پایگاه داده را با مهاجرت های افزایشی (Migration) تولید یا به روز می کنید.

در این روش شما کنترل دقیقی بر روی جزئیات مدل های داده، مانند محدودیت های ستون (حداکثر/دقیقه طول)، روابط و غیره دارید.

و با سابقه Migration، می توانید به راحتی نسخه پایگاه داده خود را به جلو یا عقب برگردانید و در عین حال از سازگاری مدل داده اطمینان حاصل کنید.

در اینجا من از روش Code First برای طراحی، تولید و به روز رسانی پایگاه داده خود با (EF (Entity Framework Core و SQL LocalDb استفاده می کنم.

روش انجام کار و نحوه Migration

ممکن است از قبل دیتابیس مورد نظر ما موجود باشد.(در مواقعی که از قبل این دیتابیس را ایجاده کرده ایم و حالا قصد اعمال تغییرات بر روی آن را داریم). در برخی موارد هنگام اجرای دستور update-database با خطایی مواجه می شویم که به ما می گوید جداول تکراری هستند. برای اینکار مجبوریم از نو یک پایگاه داده خالی بسازیم و مجددا Migration را انجام دهیم.

1. فایل SQL LocalDb ایجاد کنید.

به ” SQL Server Object Explorer -> SQL Server -> (localdb)\MSSQLLocalDB ” در Visual Studio بروید، روی ” Databases ” کلیک راست کرده و روی ” Create Database ” کلیک کنید.

نام پایگاه داده و مسیر آن را مشخص کرده و OK کنید.

پس از ایجاد پایگاه داده، دو فایل ایجاد می شود:

LDF : فایل Log Database است.

MDF : فایل اصلی پایگاه داده است.

2. کلاس های مدل داده ایجاد کنید

ابتدا کلاس مدل داده “Grape” را با برخی از ویژگی های اساسی مانند شناسه، نام و توضیحات ایجاد کنید.

شناسه کلید اصلی است و به صورت خودکار افزایش می یابد.

همچنین می توانید نام جدول و نام اسکیما آن را مشاهده کنید.

توجه داشته باشید که نام جدول در پایگاه داده می تواند با نام مدل کلاس متفاوت باشد.

هنگامی که مدل ایجاد شد، باید DbContext را ایجاد کنیم که نگاشت پایگاه داده است.

من یک WineDbContext سفارشی ایجاد می کنم و Grape DbSet را در آن اعلام می کنم.

public class WineDbContext : DbContext, IDbContext
{
    public DbSet<Grape> Grapes { get; set; }
}

اما در مورد WineDbContext تمام نشده است، باید اتصال به پایگاه داده را مقداردهی اولیه کنم.

CodeFirstUpdateConnectionString مقدار را از فایل پیکربندی بازیابی می کند: appsettings.json

{
  "ConnectionStrings": {
    "WineDbConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=[AbsoluteFolderPath]\\WINEDB.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
  }
}

به “ Package Manager Console ” بروید و پروژه پایگاه داده را به عنوان “ Default project ” انتخاب کنید و با دستور “ Add-Migration ” مایگریشن را ایجاد کنید .

Add-Migration Init

می توانید ببینید 2 روش وجود دارد: UP و Down.

Up حاوی کد زمانی است که این انتقال را در پایگاه داده اجرا کنید.

و Down حاوی کدی است که وقتی این مایگریشن را برگردانید اجرا می شود.

4. پایگاه داده را با Migration به روز کنید

هنگامی که انتقال آماده شد، می توانید پایگاه داده را با آن به روز کنید.

برای به روز رسانی دیتابیس به دستور زیر نیاز دارید:

Update-Database

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.