کلاس DbContext بخشی جدایی ناپذیر از Entity Framework است و اولین کلاسی می باشد که ما در EF Core با آن سر و کار داریم. نمونه ای از کلاس DbContext یک جلسه با بانک اطلاعاتی را نشان می دهد که می تواند برای جستجو و ذخیره موارد موجود در یک پایگاه داده استفاده شود. DbContext ترکیبی از Unit of Work و الگوی Repository می باشد.
DbContext در حقیقت کلاسی هست که به عنوان یک واحد کاری در اختیار شما قرار می گیرد و به شما امکان
مدیریت Database Connection
پیکربندی Model و Relationship ها
گرفتن Query از دیتابیس
قابلیت Change Tracking
توانایی استفاده از قابلیت کش (Chahing)
و مدیریت تراکنش ها را می دهد.
در تصویر بالا، زیر ساخت نگاشت های EF Core را مشاهده می کنید. در سمت چپ، ظرفی را داریم به نام DB Context که در برگیرنده ی DbSet ها است. در سمت راست که بیانگر ساختار کلی یک بانک اطلاعاتی است، معادل این ها را مشاهده می کنیم. هر DbSet به یک جدول بانک اطلاعاتی map خواهد شد و متشکل است از کلاسی به همراه یک سری Property که Property ها نیز به فیلدها و ستون های آن جدول در سمت بانک اطلاعاتی map می شوند.
برای استفاده از DbContext در برنامه، باید یک کلاس ایجاد کنیم که از DbContext مشتق شده است و به کلاس Context معروف است. این کلاس Context به طور معمول شامل پراپرتی های <DbSet <TEntity برای هر Entity موجود در مدل است. هنگام ساختن یک نمونه از کلاس مشتق شده از DbContext، تمامی DbSet ها شناسایی و پردازش می شوند تا Entity ها به جداول بانک اطلاعاتی Map شوند. عملیات Mapping به صورت خودکار انجام می شود که می توان از طریق متد OnModelCreating که یک متد Virtual هست، تغییرات دلخواه در مورد Mapping را اعمال کرد.
نمونه ای از کلاس Context در EF Core
در مثال بالا ، کلاس SchoolContext از کلاس DbContext ارث بری کرده است و حاوی خصوصیات <DbSet<TEntity از نوع Student و Course است. این کلاس همچنین متدهای OnConfiguring و OnModelCreating را بازنویسی کرده است. برای اتصال به پایگاه داده و ذخیره یا بازیابی اطلاعات Student یا Course باید نمونه ای از کلاس SchoolContext ایجاد کنیم.
متد OnConfiguring به ما اجازه می دهد تا منبع داده را با استفاده از DbContextOptionsBuilder انتخاب و پیکربندی کنیم. در این بخش به چگونگی پیکربندی یک کلاس DbContext می پردازیم.
متد OnModelCreating به ما امکان پیکربندی مدل را با استفاده از ModelBuilder Fluent API می دهد.
متدهای DbContext
متد | کاربرد |
Add | یک Entity جدید را با وضعیت Added به DbContext اضافه می کند و شروع به ردیابی آن می کند. این entity وقتی متد ()SaveChanges فراخوانی می شود در دیتابیس وارد می شود. |
AddAsync | متد ناهمگامی برای اضافه کردن یک موجودیت جدید به DbContext با حالت اضافه شده و ردیابی آن شروع می شود. وقتی فراخوانی ()SaveChangesAsync فراخوانی می شود ، این داده جدید موجود در دیتابیس وارد می شود. |
AddRange | یک مجموعه Entity جدید را با وضعیت Added به DbContext اضافه می کند و شروع به ردیابی آن ها می کند. این entity وقتی متد ()SaveChanges فراخوانی می شود در دیتابیس وارد می شود. |
AddRangeAsync | یک متد ناهمزمان برای اضافه کردن مجموعه ای از Entity های جدید که هنگام فراخوانی متد ()SaveChangesAsync ذخیره می شوند. |
Attach | یک موجود جدید یا از قبل موجود را با وضعیت Unchanged به DbContext وصل کرده و ردیابی آن را شروع می کند. |
AttachRange | مجموعه ای از Entity های جدید یا از قبل موجود را با وضعیت Unchanged به DbContext وصل می کند و ردیابی آن ها را شروع می کند. |
Entry | یک EntityEntry برای Entity داده شده دریافت می کند. این ورودی امکان ردیابی اطلاعات و عملیاتی برای Entity فراهم می کند. |
Find | یک Entity را با مقدار primary key داده شده پیدا می کند. |
FindAsync | یک متد ناهمزمان برای پیدا کردن یک Entity با مقدار primary key داده شده. |
Remove | وضعیت Deleted را به Entity مشخص شده تنظیم می کند که هنگام فراخوانی متد ()SaveChanges ، داده را حذف می کند. |
RemoveRange | وضعیت Deleted را به مجموعه ای از Entity ها تنظیم می کند که هنگام فراخوانی متد ()SaveChanges ، داده ها را در یک گردش دور DB حذف می کنند. |
SaveChanges | دستور INSERT ، UPDATE یا DELETE را برای دیتابیس برای Entity هایی با وضعیت Added، Modified یا Deleted اجرا می کند. |
Set | یک DbSet <TEntity> ایجاد می کند که می تواند برای جستجو و ذخیره نمونه های Tentity استفاده شود. |
Update | Entity با حالت جدا شده را به وضعیت Modified برده و ردیابی آن را شروع می کند. هنگام فراخوانی متد ()SaveChagnes داده ها ذخیره می شوند. |
UpdateRange | مجموعه ای از Entity های جدا شده را به وضعیت Modified برده و ردیابی آن ها را شروع می کند. هنگام فراخوانی متد ()SaveChagnes داده ها ذخیره می شوند. |
OnConfiguring | این متد را برای پیکربندی دیتابیس بازنویسی کنید. متد onConfiguring برای هر نمونه ای که از context ایجاد می شود صدا زده می شود. |
OnModelCreating | این متد را برای پیکربندی بیشتر مدل که از قراردادهای انواع entity های ظاهر شده در پراپرتی DbSet<TEntity> کشف شده بازنویسی کنید. |