در EF نیاز به ایجاد یک کلاس که از EntityFrameWorkDBContext ارث بری میکند داریم تا به عنوان هسته ارتباطی با دیتابیس استفاده گردد. هر Dbcontext کلاس امکان برقراری ارتباط با یک دیتابیس را ایجاد مینماید.
بسمه تعالی
ASP.NET Core 1 – قسمت بیست و چهارم
در EF نیاز به ایجاد یک کلاس که از EntityFrameWorkDBContext ارث بری میکند داریم تا به عنوان هسته ارتباطی با دیتابیس استفاده گردد. هر Dbcontext کلاس امکان برقراری ارتباط با یک دیتابیس را ایجاد مینماید. البته با تغییر Connection String میشود به دیتابیسهای مختلف دسترسی داشت ، ولی شکل عقلانی موضوع این است که هر DbContext با یک دیتابیس مشخص در ارتباط باشد .
هر DbContext حاوی چندین DbSet<T> خواهد بود که هر T میتواند یک Entity مثلن مشابه Restaurant Entity باشد .
حالا اگر به دیتابیس به نام مثلن Restaurantنیاز داشته باشیم ، باید یک Dbcontext و یک DbSet برای آن ایجاد و مراحل را پیگیری کنیم. دقت کنید که هر DbSet به یک Table از دیتابیس Map خواهد شد .
خوب حالا باید این مراحل را در سطح پروژه به صورت عملی پیگیری کنیم. در سطح پروژه یک کلاس نیاز دارم که باید از DbContext ارث بری کند . این کلاس را در Entities Folder قرار خواهم داد. مراحل مخصوصا به دلیل اینکه فقط Entity داریم ساده است و در تصویر زیر همه چیز مشهود است .
کل پیاده سازی DbContext میشود تصویر بالا و تمام . سورس پروژه را هم که برای دانلود خواهم گذاشت. حالا وقت استفاده و Register کردن این کلاس در سرویسهاست . باید این DbContext در کنترلرها Valid بوده و بتوان با آن تراکنش انجام داد. قصد من ادامه استفاده از IRestaurantData به عنوان Interface در سطح Controller میباشد فقط دیگر آن لیست Static باید حذف شده و با میانجیگری Dbcontext باید بتوان دیتابیس داشت و از آن استفاده نمود .
نکته : روالی که در حال انجام است به Code First معروف است . اگر مقاله EF 7 یا EF Core 1 را مطالعه کنید ، متوجه میشوید که دیگر اصلن DataBase First در این ورژن وجود ندارد و فایل EDMXهم حذف شده که از بابت حداقل من خیلی خوشحالم .
در پروژه های بزرگ و واقعی ، من فایلهای هر کدام از این کلاسها و InterFace ها جدا خواهم کرد ، ولی در این وضعیت ، فعلن یک کلاس جدید در فایل RestaurantData ساخته و همانجا کلیه کدهای لازمه را خواهم نوشت . این کلاس از IRestaurantData ارث بری کرده و Linq Query های مشابهی مانند آنچه از قبل داشتیم خواهد داشت . به شکل زیر باید از این Interface ارث بری و از آن استفاده نمود .
مشابه تصویر زیر و اگر هم تصویر به شما کمک نکرد، سورس پروژه ، پیاده سازی کلاس جدید مانند زیر خواهد بود .
کلاس پس از ارث بری دارای یک متد سازنده ، و متدهایی است که به دلیل ارث بری از Interface باید پیاده سازی شوند . پیاده سازی متدها البته مورد نیاز ما هم هست چون به Add و Get و GetAll نیاز داریم . همانطور که میبینید با دستورات Linq و یک عبارت Lambda به سادگی همه چیز پیاده سازی گردیده است . تنها نکته دقت به SaveChanges است که در متد Add وجود دارد . اگر پروژه سنگینی داشتید و لازم بود روی چند جدول تاثیر بگذارید ، این متد باید بیرون متدهای اعمال کننده تغییر روی یک جدول یا کلن به شکل دیگری انجام شود . در اینجا سناریوی ما ساده است و در همینجا SaveChanges را قرار میدهیم .
در قسمت بعدی باید Connection String هم وارد شود و به سرور متصل شده ، دیتابیس را بسازیم و تراکنش واقعی روی دیتابیس را اغاز کنیم.
دانلود سورس پروژه
علی کلاهدوزان
موفق باشید