در کنترلر ProductController ما یک کنترلر با چند Action داریم که به ازای اکشنها هم view ساخته ایم
اگر در view ای که به کاربر نمایش داده میشود کاربر گزینه پیش فرض یا Index را وقتی خواست مشاهده کند دستورات Action مربوط به Index در ProductController باید اجزار شوند
همه ی داده هایی که بین کنترلر , Viewها ردو بدل میشوند از طریق مدلها هستند پس طبیعتا با مدلها سرو کار داریم و وقتی صحبت از مدلها میشود یعنی با ProductServiceها سرو کار داریم:
public IActionResult Index() { var model = _productService.FindAllAsync().Result; return View(model); }
در کد بالا از طریق _productService به متد FindAllSync دسترسی پیدا میکنیم و در این متد هم به Productcoreserviceها دسترسی پیدا میکنیم و یعنی از این به بعد دسترسی پیدا کردیم به متدهای مربوط به Entity ها
public async Task<List> FindAllAsync() { return _productCoreService.GetAll().ToList().ToListModel(); }
حالا در کلاس Productcoreservice چون از Baseservice ارث بری کرده است الان میتوانیم متد GetAll() را فراخوانی کنیم و همچنین این دستور عمل Map هم انجام میشه و Entityها تبدیل میشن به Model و بر میگرده به تابع FindAllAsync کلاس ProductService , و در نهایت یک Model را برمیگرداند
public virtual IEnumerable GetAll() { return _repository.GetAll(); }
متد GetAll در Productcoreservice هم به یک object از IRepository دسترسی دارد که آنجا هم یک متد GetAll وجود دارد و در نهایت پیاده سازی آن دستور هم در کلاس EfRepository است ودستور زیر اجرا میشود:
در کلاسEfRepository یک فیلد از Dbset و DbContext داریم و در نهایت متد زیر اجرا میشود: و در اینجا متد GetAll گویا از DbContext استفاده نکرده است و لی اگر نیاز به اجرای سایر متدها مانند ADD , Update , Delete بود با استفاده از DbContext این و متدهای Save آن تغییرات اعمال میشد.
private readonly OnlineShopDbContext _context; private DbSet _entities; ---------------------------------------------------------- public virtual IEnumerable GetAll() { try { return Entities.ToList(); } catch (DbUpdateException exception) { throw new Exception(GetFullErrorTextAndRollbackEntityChanges(exception), exception); } }
خلاصه : دادههای از دیتابیس با استفاده از DbSet و DbContext در repository برداشته شدن. داده شدن به کلاس ProductCoreService اون هم Entity رو داد به ProductService و در اینجا تبدیل به مدل شد و به کنترلر بازگشت داده شد و کنترلر هم در Action مربوطه که ایندکس باشه ارسالش کرد به View تا کاربر ببینه.
سوال اول :آیا تحلیل به درستی صورت گرفته و یا دارای اشتباهی است؟
سوال دوم: قطعه کد آخر چه کاری انجام میدهد؟ و در Entities که یک نمونه از Dbset است چه میکند و چرا تبدیل به ToList میکنیم رو نمیدونم
ممنونم