
آموزش ساخت و پیکربندی DbContext
در این بخش از دوره پیشرفته Entity Framework Core 9 به آموزش ساخت و پیکربندی DBContext میپردازیم. DbContext در Entity Framework Core یک جزء کلیدی برای دسترسی به دادهها و تعامل با پایگاه داده است. این کلاس به عنوان نقطه ورود اصلی برای EF Core عمل میکند. و مدیریت چرخه حیات دادهها، درخواستهای Create, Read, Update, Delete و ارتباط با پایگاه داده را فراهم میکند.
DbContext چیست؟
DbContext در EF Core مانند قلب تپندهای برای دسترسی به دادههاست. یک دروازه هوشمند که به شما اجازه میدهد. با پایگاه داده ارتباط برقرار کنید. دادهها را بخوانید، بنویسید و تغییر دهید. بهسادگی یک کلاس. ولی قدرتمند در مدیریت چرخه حیات دادهها. و هماهنگ بین کد و پایگاه داده است. DbContext هسته اصلی دسترسی به داده است. که با ویژگیهای پیشرفته و قابلیتهای بهینهسازی عملکرد، یک ابزار قوی برای توسعهدهندگان .NET فراهم میکند.
وظایف اصلی DbContext
- مدیریت اتصال به DataBase
- ردیابی تغییرات
- مدیریت تراکنشها
- کوئریسازی و اجرای دستورات
- پیکربندی مدلها و نگاشت به جداول
این وظایف، DbContext را به نقطه مرکزی ارتباط بین برنامه و پایگاه داده تبدیل میکند.
ساخت DbContext
DbContext یک کلاس ساده C# ای است. پس یک کلاس جدید ایجاد کرده و نام آن را میتوان هرچیزی قرار داد غیر DbContext. من نام این کلاس را MyDbContext میزارم. و باید از DbContext ارثبری کند.
public class MyDbContext : DbContext
{
}پیکربندی DbContext
- تعریف سازنده با DbContextOptions : کلاس DbContext نیاز به یک سازنده دارد که از DbContextOptions به عنوان پارامتر استفاده کند. این پارامتر برای پیکربندی کانکشن به پایگاه داده و سایر تنظیمات ضروری است.
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}- تعریف DbSet ها : توسط DbSet ها به EF Core میگوییم که کدام یک از مدل های ما باید تبدیل به یک جدول در دیتابیس شود. DbSet هر جدول و عملیات CRUD مرتبط با آن را مدیریت میکند.
public DbSet Products { get; set; }- متد OnConfiguring : این متد زمانی که DbContext ایجاد میشود. فراخوانی میشود. و از آن برای تنظیم گزینههای مرتبط با پایگاه داده استفاده میشود. مثل Connection String و Provider.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}- متد OnModelCreating : اضافه کردن آن اختیاری است. در صورتی که نیاز به پیکربندیهای پیشرفتهتری برای جداول و مدل های خود دارید، میتوانید از متد OnModelCreating استفاده کنید. این متد به شما اجازه میدهد. تا از Fluent API برای تنظیم ویژگیهای مدلها و نحوه نگاشت آنها به جداول پایگاه داده استفاده کنید.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}ترتیب در DbContext
ترتیب قرارگیری متد ها در کلاس سازنده بهتر است به شکل زیر باشد
- سازنده با DbContextOptions
- تعریف DbSet ها
- متد OnConfiguring
- متد OnModelCreating
استفاده از DbContext
استفاده از DbContext با Dependency Injection ساده است. میتوانید آن را به راحتی در Program.cs پیکربندی کنید. DbContext با Dependency Injection بهصورت خودکار مدیریت میشود. استفاده از DI برای DbContext کمک میکند تا به جای ایجاد نمونههای مستقیم از DbContext، آن را بهصورت امن و کارا در بخشهای مختلف برنامه استفاده کنید.
// Add services to the container.
builder.Services.AddDbContext<DatabaseContextName>(c => c.UseSqlServer("YourConnectionStringHere"));ConnectionStrings در EF Core
در اینجا چند نمونه از کانکشن استرینگها را برای استفاده در DbContext در EF Core مشاهده میکنید
- کانکشن استرینگ برای اتصال با ویندوز
"Server=YOUR_SERVER_NAME;Database=YOUR_DATABASE_NAME;Trusted_Connection=True;"در صورتی که با ارور Certificate در اتصال با ویندوز روبرو شدید. چون در حالت توسعه هستید میتوانید آن را غیر فعال کنید. ولی در سرور نباید این کار را انجام دهید. در ویندوز در بخی مواقع نمیتواند Certificate برای امن بودن در ssl را ارئه دهد.
"Server=YOUR_SERVER_NAME;Database=YOUR_DATABASE_NAME;Trusted_Connection=True;TrustServerCertificate=True;"- کانکشن استرینگ برای اتصال با سرور
"Server=YOUR_SERVER_NAME;Database=YOUR_DATABASE_NAME;User Id=YOUR_USERNAME;Password=YOUR_PASSWORD;"- همچنین برای حرفه ای تر کار کردن میتوانید به صورت زیر کانکشن استرینگ خود را در فایل appsettings.json تعریف کنید. و هر جا نیاز به کانکشن استرینگ شد. از نام آن استفاده کنید. در این مثال نام کانکشن استرینگ ما MyConnection است.
"ConnectionStrings": {
"MyConection": "Server=.;Database=titit;Trusted_Connection=True;TrustServerCertificate=True"
}نحوه دریافت کانکشن استرینک AppSettings به صورت زیر است.
builder.Services.AddDbContext<MyDbContext>(a => a.UseSqlServer("name=ConnectionStrings:MyConection"));خطا های رایج در DbContext
- در صورتی که با ارور زیر مواجه شدید.
An error occurred while accessing the Microsoft.Extensions.Hosting services. Continuing without the application service provider. Error: ‘AddDbContext’ was called with configuration, but the context type ‘MyDbContext’ only declares a parameterless constructor. This means that the configuration passed to ‘AddDbContext’ will never be used. If configuration is passed to ‘AddDbContext’, then ‘MyDbContext’ should declare a constructor that accepts a DbContextOptions<MyDbContext> and must pass it to the base constructor for DbContext.باید در DbContext حود یک سازنده با DbContextOptions تعریف کنید مثل زیر.
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}- در صورتی که با ارور زیر مواجه شدید.
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 – The certificate chain was issued by an authority that is not trusted.)اتصال با سرور برقرار است. اما هنگام فرآیند ورود، مشکل در تأیید اعتبار SSL پیش آمده. به عبارت دیگر، گواهینامه SSL که سرور استفاده میکند. توسط کلاینت معتبر تشخیص داده نشده. و علت آن به دلیل گواهینامه نامعتبر یا ناشناخته است. پس باید مقدار TrustServerCertificate=True را به کانکشن استرینگ خود اضافه کنید.
";Server=YOUR_SERVER_NAME;Database=YOUR_DATABASE_NAME;Trusted_Connection=True;TrustServerCertificate=True"






























کاش مفاهیم انتزاعی و پیچیده رو بیشتر باز کنید و توضیح بدید. متاسفانه تقریبا هیچ چیزی از این قسمت نفهمیدم.
مثلا کلاس سازنده چیه دقیقا و چرا بهش نیاز داریم. اگه نباشه چی میشه؟
یا چرا جلوی بعضی از متدها به جای () از استفاده میشه؟
کلاس دی بی کانتکست رو هم که نفهمیدم هیچیش رو.
مخصوصا که چرا باید اور راید کنیم؟
و اینکه اون کلمه base واسه چی بود
ممنون
اینایی که شما اسمش گذاشتید پیچیده، مفاهیم خیلی ساده و اولیه برنامه نویسی هست. مثل این میمونه یک مکانیک ندونه انبردست چیه و چه کاربردی داره
سلام و وقت بخیر ضمن تشکر و خسته نباشید اما واقعا همینطوره که دوستمون بهزاد گفتند مطالب خیلی کلی گفته میشند ما خیلی از چیزارو متوجه نمیشیم اصلا چرا این گذاشته میشه برای چی هست آیا سینتکش همینه یا دلیل دیگه ای داره !!
سلام ممنون از شما فکر میکنم در ادامه دوره خیلی از سوالات شما پاسخ داده میشود. تلاش خودمون را میکنیم تا روان تر و کامل تر مباحث را مطرح کنیم. حتما نطرات شما را در ادامه دوره در نظر میگیریم و سعی میکنیم بهتر شویم ❤️❤️
سلام ممنون از شما فکر میکنم در ادامه دوره خیلی از سوالات شما پاسخ داده میشود. حتما نطرات شما را در ادامه دوره در نظر میگیریم و یک قسمت حتما به این مباحث میپردازیم ❤️❤️