دیتا بیس مایگریشن -sql migration به فرایند تغییر یا به روز رسانی ساختار یا داده های یک دیتابیس اطلاق می شود. این کار به منظور هماهنگ کردن دیتابیس با نیازهای جدید یا تغییرات اعمال شده در برنامه نویسی انجام می شود. برای مثال، اگر شما یک جدول جدید به دیتابیس خود اضافه کنید یا یک ستون را تغییر نام یا حذف کنید، شما یک مایگریشن انجام داده اید. مایگریشنها به شما امکان می دهند که تاریخچه و نسخه بندی دیتابیس خود را ذخیره و مدیریت کنید و بتوانید بین حالت های مختلف دیتابیس جابجا شوید. برای انجام مایگریشنها، معمولا از ابزارهای خاصی استفاده می شود که به شما امکان می دهند که دستورات SQL مربوط به تغییرات دیتابیس را تولید، اجرا و لغو کنید.
قبل از هر چیز مسلماً باید Sql-server نصب و اماده باشد.اما قدم بعد این است که در پوشه modles یک کلاس جدید ایجاد کنید و اطلاعات جدولی که قصد اضافه کردن ان به دیتا بیس را دارید را به شکل زیر وارد کنید.
using System.ComponentModel.DataAnnotations;namespace radnom_web.Models
{
public class Custumer
{
[Key]
public int id { get; set; }
[Required] // NOTNUll
public string Name { get; set; }
public int Age { get; set; }
public DateTime BrithDay { get; set; } =DateTime.Now;
} }
هر کدام از متغیر های بالا ستون های جدول ما را می سازد یعنی با کد بالا ما یک جدول میسازیم که یک id دارد و یک Name دارد و یک Age دارد و یک BrithDay دارد. تربیوت Key به معنی آن است که id یک primary key است و اتربیوت Required همان notnull در sql است.
اما فایل بالا به تنهایی کاری کاری نمی کند و فقط یک مدل است.
برای وصل شدن به دیتا بیس نیاز به ConnectionStrings داریم.این اطلاعات را باید در فایل appsettings.json نوشته بشود.من متن زیر را به این فایل اضافه کردم:
"ConnectionStrings": {
"DefultConnection": "Server=DESKTOP-ND9E5MT;Database=test;Trusted_Connection=True;"
}
نام سرور خود را جلوی server بنویسید و اسم دیتا بیس را جلوی Database.اگر دیتا بیس شما پسورد و موارد اضافه دیگری نیاز داشت باید در همین فایل اضافه کنید.
در این مرحله یک پوشه جدید به اسم Data ایجاد کنید و درون آن یک کلاس به اسم انتخابی خود بسازید من اسم کلاس را ApplicationDbContext قرار دادم.کد زیر را در فایل نوشتم :
using Microsoft.EntityFrameworkCore;
using radnom_web.Models;
namespace radnom_web.Data
{
public class ApplicationDbContext :DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) :base(options) { }
public DbSet<Custumer> Custumers { get; set; }
}
}
کلاس بالا از DbContext ارث بری میکند و کانستکتور باید دقیقا به همان شکلی که در بالا اماده باشد.
از اینجا به بعد باید برای هر جدولی که میخواهیم در دیتا بیس داشته باشیم یک DbSet بسازیم.در مثال بالا ما برای یک جدول جدید به اسم Custumers ساختیم که از نوع cutumer است که در مرحله اول ساختیم.
فایل program.cs را باز کنید و این خط را پیدا کنید
var builder = WebApplication.CreateBuilder(args);
و بعد از آن این خط را اضافه کنید
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(
builder.Configuration.GetConnectionString("DefultConnection")
));
حالا Package Manager Console را در ویژوال استدیو باز کنید و دستور add-migration yourName را بنویسید.بجای yourName نام موردنظر خود را وارد کنید.این دستور یک پوشه به اسم Migrations برای شما میسازد.
اما هنوز هیچ تغییری در دیتا بیس ایجاد نشده شده است.برای اعمال تغییرات در دیتا بیس باید از دستور update-database استفاده کنید.
لینک های مرتبط :
Migrations Overview
atriya.com
blog.faradars.org
barnamenevis.org