بیایید هر کدام از این مفاهیم و تکنولوژیها را به طور جداگانه بررسی کنیم و تفاوتهای آنها را توضیح دهیم:
1. ORM (Object-Relational Mapping)
ORM یا Object-Relational Mapping
یک تکنولوژی است که به برنامهنویسان اجازه میدهد تا دادههای پایگاه داده رابطهای را به صورت اشیاء برنامهنویسی شده مدیریت کنند. به بیان دیگر، ORM رابطه بین جداول پایگاه داده و کلاسهای برنامهنویسی را برقرار میکند تا برنامهنویسان بتوانند با استفاده از اشیاء، عملیات CRUD (ایجاد، خواندن، بهروزرسانی، حذف) را انجام دهند.
2. Entity Framework (EF)
Entity Framework
یک ORM متنباز توسعه داده شده توسط مایکروسافت برای .NET است که به شما اجازه میدهد با پایگاه دادههای رابطهای با استفاده از مدلهای شیءگرا کار کنید. EF به شما این امکان را میدهد که به جای نوشتن مستقیم کوئریهای SQL، با استفاده از زبان برنامهنویسی (مانند C#) به دادهها دسترسی پیدا کنید و عملیات مورد نیاز را انجام دهید.
ویژگیها:
پشتیبانی از مدلسازی دادههای پیچیده.
امکان انجام پرس و جوهای پیچیده با استفاده از LINQ.
پشتیبانی از چندین پایگاه داده مختلف.
کاهش نیاز به نوشتن کوئریهای دستی SQL.
3. EF Core
EF Core
نسخهای بهروزشده و سبکتر از Entity Framework است که برای کار با .NET Core طراحی شده است. EF Core از ویژگیهای بهتری نسبت به نسخه کلاسیک EF برخوردار است و قابلیت پشتیبانی از پلتفرمهای مختلف (چندسکویی) را دارا میباشد.
ویژگیها:
سبکتر و سریعتر نسبت به EF کلاسیک.
پشتیبانی از پلتفرمهای مختلف و چندسکویی.
قابلیتهای بهبود یافته برای مدلسازی و پرس و جو.
4. ADO.NET
ADO.NET
یک فناوری قدیمیتر است که توسط مایکروسافت برای دسترسی به دادهها و تعامل با پایگاه دادههای رابطهای توسعه داده شده است. ADO.NETبیشتر به برنامهنویسان امکان میدهد تا به صورت مستقیم با پایگاه دادهها از طریق دستورات SQL و دیتاستها (DataSets) تعامل کنند.
ویژگیها:
دسترسی مستقیم و سریع به پایگاه داده.
مدیریت اتصالات پایگاه داده.
استفاده از دستورات SQL برای انجام عملیات بر روی دادهها.
مناسب برای برنامههای که نیاز به کارایی بالا دارند.
5. Dapper
Dapper
یک ORM سبک و سریع است که به عنوان یک افزونه برای ADO.NETطراحی شده است. Dapper تمرکز بیشتری بر روی عملکرد و کارایی دارد و به برنامهنویسان اجازه میدهد تا با استفاده از دستورات SQL مستقیم و اتصال به پایگاه داده، عملیات مورد نیاز را انجام دهند. Dapper به عنوان یکی از سریعترین ORMها شناخته میشود.
ویژگیها:
بسیار سریع و سبک.
استفاده آسان و مستقیم از SQL.
ادغام ساده با ADO.NET.
مناسب برای برنامههایی که نیاز به کارایی و سرعت بالا دارند.
تفاوتها:
1- سادگی و سرعت:
Dapper
به دلیل سبک بودن و استفاده مستقیم از SQL، سریعترین ORM است.
ADO.NET
نیز به دلیل دسترسی مستقیم به پایگاه داده، کارایی بالایی دارد.
EF و EF Core
به دلیل استفاده از مدلهای شیگرا، پیچیدگی بیشتری دارند اما توسعه را سادهتر میکنند.
2- قابلیت مدلسازی دادهها:
EF و EF Core
امکانات پیشرفتهای برای مدلسازی دادههای پیچیده دارند.
Dapper و ADO.NET
کمتر بر مدلسازی دادهها تمرکز دارند و بیشتر بر عملکرد تمرکز دارند.
3- پشتیبانی از چندین پایگاه داده:
EF و EF Core
از چندین پایگاه داده مختلف پشتیبانی میکنند.
Dapper و ADO.NET
نیز قابل استفاده با چندین پایگاه داده هستند اما تنظیمات بیشتری نیاز دارند.
4- سطح انتزاع:
EF و EF Core
سطح انتزاع بالاتری دارند و برنامهنویسان را از نوشتن مستقیم کوئریهای SQL بینیاز میکنند.
Dapper و ADO.NET
سطح انتزاع کمتری دارند و بیشتر به برنامهنویسان امکان کنترل مستقیم بر پایگاه داده را میدهند.
نتیجهگیری:
هر یک از این تکنولوژیها و ابزارها مزایا و معایب خود را دارند و انتخاب مناسب بستگی به نیازهای خاص پروژه شما دارد. اگر به سادگی و کارایی بالا نیاز دارید، Dapper یا ADO.NETگزینههای خوبی هستند. اگر به امکانات پیشرفتهتر برای مدلسازی و مدیریت دادهها نیاز دارید، EF یا EF Core میتوانند انتخابهای مناسبی باشند.
ایجاد پروژه و
نصب پکیج
Microsoft.EntityFrameworkCore.SqlServer
و
Microsoft.EntityFrameworkCore.Tools
پوشه 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; }
}
}
پوشه 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; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-3PDBPI3\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
}
}
}
در پک منیجر 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 است که به شما کمک میکند تا تغییرات در مدلهای دادهای و پایگاه داده را به صورت سیستماتیک و مدیریتی اعمال کنید. این ابزار به شما اجازه میدهد تا توسعه و نگهداری پایگاه دادهها را سادهتر کنید و از مشکلات مرتبط با تغییرات دستی جلوگیری کنید.