اهمیت این قسمت زیاد است ، چرا که باید از هر آنچه در Entity FrameWork و Repository گفته شد را در این قسمت در یک پروژه MVC استفاده کنیم.
بسمه تعالی
بررسی منطق Repository Pattern و شکل پیاده سازی آن در یک پروژه ASP.NET MVC
قسمت پایانی
اهمیت این قسمت زیاد است ، چرا که باید از هر آنچه در Entity FrameWork و Repository گفته شد را در این قسمت در یک پروژه MVC استفاده کنیم.
شروع کار با ایجاد یک MVC Project خواهد بود . مشابه تصویر یک پروژه MVC جدید ایجاد کنید .
خوب در مرحله بعدی ایجاد پروژه با دقت کنید که دقیقن مشابه تصویر زیر باشد ، چرا که هیچ مدلی از Authentication را قرار نیست استفاده کنم.
نوع را Authentication را None انتخاب کنید تا فعلا گرفتار Identity DbContext نشوید.
حالا 2 فولر Core و Persistence را که در پروژه قبلی داشتیم را به این پروژه اضافه کنید و همه NameSpace را تصحیح کنید .
اگر با پیام خطاهای مرتبط با Entity Frame Work در NameSpace ها روبرو شدید ، از طریق Nuget باید Entity FrameWork را نصب نمایید .
درون WebConfig رفته و Connection String را هم تنظیم نمایید.
درون Connection String باید عبارت Name را iliaContext را قرار دهید ، چرا که در DbContext هم به همین نام تایین شده است .
هر Controller به جز HomeController را از پروژه حذف کنید و Bundle و Filter و Route اگر فایل دیگر داشتید ، آنها را هم حذف کنید . این طوری درگیر Conflict با کلاس یا آیتم دیگری نخواهید شد .
حالا به سراغ Index View بروید .
سناریو همانطور که پیداست داشتن یک لیست از Course هاست و یک دکمه برای افزدون رکورد به لیست . پس دو متد در Controller نیاز داریم ، یکی برای نمایش لیست که همان Index است و دیگری برای ایجاد رکورد که همان Create است .
حال بسراغ HomeController برویم
در HomeController یک متد سازنده ایجاد خواهیم کرد .
از طریق این _Context کلیه مراحل را در سطح Controller انجام خواهد شد . متد Index را ببینید .
برای متد Create فقط یک محتوای ثابت داریم و متد ورودی ندارد ، پس متد به شکل زیر خواهد شد .
اگر به تصویر زیر دقت کنید ، خواهید دید که با OverRide کردن Dispose در سطح Controller میتوانم بعد از پایان کل روند Instant را در حافظه نابود کنم .
سوال : آیا همه چیز خوب است و دیگر باید راضی باشیم ؟. خیر این که نشد ، به تصویر زیر دقت کنید .
دوباره من DbContext را برداشته ام و به درون Controller آورده ام و تازه باید مثلن Dispose را هم خودم کد نویسی کنم. قرار شد Controller از DBContext و ... مستقل باشد و داستانهایی که قبلن کلی در موردش حرف زدیم و الان همه را نقض کرده ایم . پس چه کنیم؟
پاسخ : Unit Of Work برای همین ساخته شده است . مشابه زیر عمل کنید .
1- آن متد Dispose را که OverRide کردیم را کلن پاک کنید .
2- متد سازنده من بر اساسی Dependency Injection به شکل زیر خواهد شد.
همانطور که در تصویر میبینید ، دیگر _Context و کلن استفاده از DbContext در سطح Controller را بیخیال شدیم. حالا متد Index را تصحیح کنید.
خوب این هم از ایندکس . اینجا به خاطر IEumerAble بودن خروجیها ، دیگر به Tolist هم نیاز نیست و فقط باید متد GetAll را صدا کنیم. مشابه همین را در Create هم خواهیم داشت.
خوب حالا دیگر کاملن لایه ها جدا شده و هیچ وابستگی به DbContext در Controller ها نداریم . متد Saveهم رفت و از Complete باشد استفاده شود . حتی در NameSpace ها هم مشابه تصویر زیر ، دیگر از Persistence استفاده نخواهد شد .
خوب این شد همان چیزی که نیاز داشتیم . دیگر Repository Pattern را هم یاد گرفته اید و میتوانید در پروژه های MVC به آسانی استفاده کنید. در اینجا دیگر خیال من از پیش نیازها راحت شد و میتوانید با مطالعه مقالات Core 1 و این چند مقاله برای کار با AngularJS 2 در بستر ASP.NET MVC Core 1 آماده شوید .