در نوشته قبلی قابلیت Query splitting در EF 5 را بررسی کردیم که شاید بتوان گفت قابلیت جدیدی هم ،ولی ایجاد و مدیریت روابط چند به چند دیگر چیز جدیدی نیست و در نسخه های قبلی EF بود. در چند ورژن از EF Core به دلیل اینکه تیم ماکروسافت خسته می شدند و حالش را نداشتند پیاده کنند نبود و باز در ورژن 5 اضافه شده است. از این رو در بعضی از نسخه ها نبوده و شاید بعضی از برنامه نویسان مدتی است با آن سر و کار نداشته اند، برآن شدیم باز جرعه ای از دریای علم خود را به شما خوانندگان عزیز بنوشانیم باشد که به عمق دانش لایزال بنده در خواندن داکیومنتهای مثل روز بر همه روشن پی ببرید.
خوشبختانه در مقاله قبلی یک پروژه ساخته ام و بیشتر مراحل طی شده و الان باز لازم نیست از صفر یک پروژه بسازم و بیچاره شوم . سورس پروژه قبلی در کانال موجود است . اسم آن پروژه EF5-Samples بود که الان هم در همان مراحل بررسی را پی میگیریم.
تنها دو Entity جدید به شکل زیر اضافه کرده ایم
در تصویر بالا به سادگی یک رابطه Many-To-Many بین Class و Student ایجاد شده است.
و ضمنن این دو Entity راه به DbContext معرفی کرده ایم.
حالا اگر پروژه را اجرا کنم، چون با دستوراتی که در مقاله قبلی در هر اجرا کل دیتابیس را نابود و مجدد بازسازی میکنم، خواهیم دید که جداول بازسازی میشود. من آن قسمت را شکار میکنم و برای شما به صورت تصویر قرار خواهم داد.
خود EF برای شما جدولی به نام ClassStudent خواهد ساخت که عملن یک جدول واسط برای نگهداری ID کلاسها و دانش آموزان است
حالا جداول را ساخت. بد نیست چند رکورد اضافه کنیم ببینیم چه میشود و بعد چطوری کوئری بنویسیم. من در پروژه قبلی یک متد ساده Get داشتم که الان هم درون همان چند خط دستور اضافه میکنم .
با این چند خط کد ساده بالا، 3 نفر دانش آموز ایجاد شد که هر کدام یک یا چند درس را انتخاب کرده اند . بعد هم کلن رکوردها به جداول اضافه گردید.
خوب حالا اجازه بدهید کوئری بنویسیم و با دستورات Linq دیتا را Fetch کنیم. اول یک Scope جدید از DbContext برای کوئری نویسی ایجاد میکنم.
به این کوئری ساده دقت کنید. لیست کل دانش آموزان و کلاسهایی که انتخاب کرده اند را برای ما از دیتابیس ییرون می آورد. برای اینکه بتوانیم دیتا را در کنسول نمایش دهیم هم یک متد استاتیک ساده به نام PrintStudents نوشتم تا دیتا را در کنسول چاپ کنید
این هم نتیجه اجرای کد من
خوب دیگر کوئری نویسی با Linq را هم که باید بلد باشید و به سادگی با چنین کانسپتی کار کنید. لازم است اضافه کنم که میشود این جدول واسط با customized هم کرد که شاید در آینده در مقاله ای جداگانه به آن هم بپردازیم
موفق و پیروز باشید
علی کلاهدوزان – بیست و نهم دی ماه سنه 1399 – کوالالامپور- مالزی