در این بخش از دوره پیشرفته Entity Framework Core 9 به آموزش ساخت و پیکربندی DBContext میپردازیم. DbContext در Entity Framework Core یک جزء کلیدی برای دسترسی به دادهها و تعامل با پایگاه داده است. این کلاس به عنوان نقطه ورود اصلی برای EF Core عمل میکند. و مدیریت چرخه حیات دادهها، درخواستهای Create, Read, Update, Delete و ارتباط با پایگاه داده را فراهم میکند.
DbContext در EF Core مانند قلب تپندهای برای دسترسی به دادههاست. یک دروازه هوشمند که به شما اجازه میدهد. با پایگاه داده ارتباط برقرار کنید. دادهها را بخوانید، بنویسید و تغییر دهید. بهسادگی یک کلاس. ولی قدرتمند در مدیریت چرخه حیات دادهها. و هماهنگ بین کد و پایگاه داده است. DbContext هسته اصلی دسترسی به داده است. که با ویژگیهای پیشرفته و قابلیتهای بهینهسازی عملکرد، یک ابزار قوی برای توسعهدهندگان .NET فراهم میکند.
این وظایف، DbContext را به نقطه مرکزی ارتباط بین برنامه و پایگاه داده تبدیل میکند.
DbContext یک کلاس ساده C# ای است. پس یک کلاس جدید ایجاد کرده و نام آن را میتوان هرچیزی قرار داد غیر DbContext. من نام این کلاس را MyDbContext میزارم. و باید از DbContext ارثبری کند.
public class MyDbContext:DbContext
{
}
public MyDbContext(DbContextOptions<MyDbContext> options):base(options)
{
}
public DbSet Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
ترتیب قرارگیری متد ها در کلاس سازنده بهتر است به شکل زیر باشد
استفاده از DbContext با Dependency Injection ساده است. میتوانید آن را به راحتی در Program.cs پیکربندی کنید. DbContext با Dependency Injection بهصورت خودکار مدیریت میشود. استفاده از DI برای DbContext کمک میکند تا به جای ایجاد نمونههای مستقیم از DbContext، آن را بهصورت امن و کارا در بخشهای مختلف برنامه استفاده کنید.
// Add services to the container.
builder.Services.AddDbContext<DatabaseContextName>(c => c.UseSqlServer("YourConnectionStringHere"));
در اینجا چند نمونه از کانکشن استرینگها را برای استفاده در 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;"
"ConnectionStrings": {
"MyConection": "Server=.;Database=titit;Trusted_Connection=True;TrustServerCertificate=True"
}
نحوه دریافت کانکشن استرینک AppSettings به صورت زیر است.
builder.Services.AddDbContext<MyDbContext>(a => a.UseSqlServer("name=ConnectionStrings:MyConection"));
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 واسه چی بود
ممنون