در پک منیجر Add-Migration InitialCreate
را اضافه می کنید تا Migration ساخته شود و Update-Database
را هم می زنیم تا اتصال در دیتابیس بر قرار می شود و جدول customer ایجاد شده است
و Migration ایجاد شده است
هر دو نوع اتصالی ، یک هدف را دنبال میکنند: اتصال به سرور SQL Server با استفاده از EF Core. تفاوت اصلی بین آنها در نحوه نگارش رشته اتصال است. در یکی از آنها از دو backslash \\ و در دیگری از یک backslash و یک @ در ابتدای رشته استفاده شده است.
تفاوت در نحوه نگارش:
با استفاده از دو backslash:
optionsBuilder.UseSqlServer("Data Source=DESKTOP-3PDBPI3\\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
این روش با استفاده از دو backslash (\\) برای escaping درست کاراکتر backslash در رشته استفاده میشود.
با استفاده از @ در ابتدای رشته:
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-3PDBPI3\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
این روش از یک @ در ابتدای رشته استفاده میکند تا به زبان برنامهنویسی C# بگوید که این یک رشتهی verbatim است و باید به صورت دقیق و بدون escape کردن backslashها پردازش شود.
TrustServerCertificate=True
این گزینه در رشته اتصال به SQL Server استفاده میشود تا به کلاینت (برنامه شما) بگوید که به گواهی SSL سرور اعتماد کند، حتی اگر این گواهی توسط یک مرجع معتبر صادر نشده باشد.
کاربرد TrustServerCertificate=True
مشکلات گواهی SSL: در مواردی که گواهی SSL سرور SQL Server بهصورت خود-امضا شده (self-signed) باشد یا توسط یک مرجع معتبر صادر نشده باشد، این تنظیمات به کلاینت اجازه میدهد تا با نادیده گرفتن خطای گواهی، به سرور متصل شود.
محیطهای توسعه: این گزینه معمولاً در محیطهای توسعه و تست استفاده میشود، جایی که ممکن است از گواهیهای خود-امضا استفاده شود و نیازی به اعتماد به یک مرجع معتبر وجود نداشته باشد.
نتیجهگیری
هر دو رشته اتصال که استفاده کردهاید، عملکرد یکسانی دارند، و تفاوت اصلی در نحوه نگارش آنهاست. TrustServerCertificate=True به کلاینت اجازه میدهد تا به گواهی SSL سرور اعتماد کند، حتی اگر معتبر نباشد، که معمولاً در محیطهای توسعه و تست مفید است. امیدوارم این توضیحات کمککننده باشد.
Migration
یا مهاجرت در زمینه Entity Framework Core، به فرآیندی اطلاق میشود که به شما کمک میکند تا تغییرات در مدلهای دادهای خود را به پایگاه داده اعمال کنید. این تغییرات میتوانند شامل ایجاد، تغییر و حذف جداول و ستونها باشند. مهاجرتها به شما امکان میدهند تا مدل دادهای و پایگاه داده خود را همگام نگه دارید و به صورت سیستماتیک تغییرات را مدیریت کنید.
مفهوم Migration
در Entity Framework Core، مهاجرتها به شما کمک میکنند تا تغییرات در مدلهای دادهای را بدون نیاز به نوشتن مستقیم کوئریهای SQL مدیریت کنید. هر تغییر در مدلهای دادهای به عنوان یک مهاجرت جدید ثبت میشود و شما میتوانید این مهاجرتها را به پایگاه داده اعمال کنید.
مراحل اصلی در استفاده از Migration
ایجاد Migration جدید: زمانی که تغییراتی در مدل دادهای خود ایجاد میکنید (مثلاً اضافه کردن یک کلاس یا تغییر در ویژگیهای موجود)، باید یک مهاجرت جدید ایجاد کنید که این تغییرات را ثبت کند. این کار با استفاده از دستور Add-Migration انجام میشود.
اعمال Migration به پایگاه داده: بعد از ایجاد مهاجرت جدید، باید این تغییرات را به پایگاه داده اعمال کنید. این کار با استفاده از دستور Update-Database انجام میشود.
نحوه استفاده از Migration در Entity Framework Core
بیایید مراحل استفاده از مهاجرتها را با یک مثال بررسی کنیم.
مرحله 1: ایجاد مدل دادهای
فرض کنید یک مدل دادهای به نام Customer دارید:
public class Customer
{
public int CustomerId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
مرحله 2: ایجاد یک DbContext
یک کلاس DbContext به نام DatabaseContext ایجاد کنید:
using Microsoft.EntityFrameworkCore;
public class DatabaseContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
مرحله 3: ایجاد مهاجرت جدید
تغییرات در مدل دادهای را با استفاده از دستور Add-Migration ثبت کنید:
dotnet ef migrations add InitialCreate
این دستور یک فایل مهاجرت جدید ایجاد میکند که شامل کد لازم برای ایجاد جدول Customer در پایگاه داده است.
مرحله 4: اعمال مهاجرت به پایگاه داده
تغییرات ثبت شده در مهاجرت را به پایگاه داده اعمال کنید:
dotnet ef database update
این دستور جداول جدید را ایجاد و تغییرات را به پایگاه داده اعمال میکند.
مدیریت نسخهها با Migration
مهاجرتها به شما امکان میدهند که تاریخچه تغییرات در پایگاه داده را دنبال کنید و در صورت نیاز به نسخههای قبلی بازگردید. هر مهاجرت شامل یک زمانمهر و کد منحصر به فرد است که نسخه خاصی از پایگاه داده را نشان میدهد.
نتیجهگیری
Migration
یک ابزار قدرتمند در Entity Framework Core است که به شما کمک میکند تا تغییرات در مدلهای دادهای و پایگاه داده را به صورت سیستماتیک و مدیریتی اعمال کنید. این ابزار به شما اجازه میدهد تا توسعه و نگهداری پایگاه دادهها را سادهتر کنید و از مشکلات مرتبط با تغییرات دستی جلوگیری کنید.
پوشه Models و پوشه Cuntext و فایل DatabaseContext.cs
using Microsoft.EntityFrameworkCore;
using WebApplication5.Models.Entities;
namespace WebApplication5.Models.Context
{
public class DatabaseContext : DbContext
{
public DatabaseContext()
{
}
public DbSet<Customer> Customers { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-3PDBPI3\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Warranty>().HasKey(p=> p.ProductId);
modelBuilder.Entity<Product>().HasOne(p=> p.Warranty).WithOne(p=> p.Product).HasForeignKey<Warranty>(p=> p.ProductId);
modelBuilder.Entity<Customer>().Property(e => e.Name).HasColumnName("FullName").HasColumnType("nvarchar(50)");
}
}
}
بسیار خوب! بیایید کد شما را قدم به قدم توضیح دهیم:
کتابخانهها و namespaceها
using Microsoft.EntityFrameworkCore;
using WebApplication5.Models.Entities;
namespace WebApplication5.Models.Context
{
Microsoft.EntityFrameworkCore:
این کتابخانه اصلی برای استفاده از Entity Framework Core است که شامل کلاسها و متدهای لازم برای کار با پایگاه دادهها میباشد.
WebApplication5.Models.Entities:
فرض میشود که مدلهای دادهای شما، مانند Customer و Product، در این namespace قرار دارند.
تعریف کلاس DbContext
public class DatabaseContext : DbContext
{
public DatabaseContext()
{
}
public DbSet<Customer> Customers { get; set; }
public DbSet<Product> Products { get; set; }
DatabaseContext:
این کلاس از DbContext به ارث برده است و به عنوان کانتکست پایگاه داده شما عمل میکند.
DbSet<Customer> Customers و DbSet<Product> Products:
این ویژگیها جداول Customers و Products را در پایگاه داده شما نمایندگی میکنند و به شما امکان دسترسی به دادهها را میدهند.
پیکربندی اتصال به پایگاه داده
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-3PDBPI3\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
}
OnConfiguring:
این متد برای پیکربندی گزینههای پایگاه داده استفاده میشود.
optionsBuilder.UseSqlServer:
تنظیمات اتصال به SQL Server را مشخص میکند. در اینجا، از SQL Server محلی (SQLEXPRESS) و پایگاه دادهای به نام StoreEf استفاده شده است. Integrated Security=True نشان میدهد که از اعتبارسنجی ویندوز استفاده میشود. TrustServerCertificate=True نیز برای اعتماد به گواهی SSL سرور استفاده شده است.
پیکربندی مدلها
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Warranty>().HasKey(p => p.ProductId);
modelBuilder.Entity<Product>().HasOne(p => p.Warranty).WithOne(p => p.Product).HasForeignKey<Warranty>(p => p.ProductId);
modelBuilder.Entity<Customer>().Property(e => e.Name).HasColumnName("FullName").HasColumnType("nvarchar(50)");
}
OnModelCreating:
این متد برای پیکربندی و سفارشیسازی مدلهای دادهای استفاده میشود.
modelBuilder.Entity<Warranty>().HasKey(p => p.ProductId):
این کد مشخص میکند که کلید اصلی جدول Warranty، ستون ProductId است.
modelBuilder.Entity<Product>().HasOne(p => p.Warranty).WithOne(p => p.Product).HasForeignKey<Warranty>(p => p.ProductId):
این کد یک رابطه یک به یک بین Product و Warranty تعریف میکند، به طوری که Product یک Warranty دارد و Warranty یک Product. کلید خارجی در Warranty، ProductId است.
modelBuilder.Entity<Customer>().Property(e => e.Name).HasColumnName("FullName").HasColumnType("nvarchar(50)"):
این کد نام ستون Name در جدول Customer را به FullName تغییر میدهد و نوع داده آن را به nvarchar(50) تنظیم میکند.
نتیجهگیری
این کد، یک کانتکست پایگاه داده را با استفاده از Entity Framework Core تعریف میکند که شامل جداول Customer، Product، و Warranty است و تنظیمات خاصی برای ارتباطات و پیکربندیها فراهم میکند. با این تنظیمات، شما میتوانید به راحتی با پایگاه داده SQL Server خود ارتباط برقرار کنید و دادهها را مدیریت کنید.
پوشه Models و پوشه Entities و فایل Customer.cs
namespace WebApplication5.Models.Entities
{
public class Customer
{
public long Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
}