PDA

View Full Version : سوال: خطا هنگام خواندن اطلاعات یک جدول از دو جدولی که join شده اند + Entity



fa_karoon
چهارشنبه 06 خرداد 1394, 18:32 عصر
سلام دوستان
من دو تا جدول ساده دارم که کلید اصلی جدول اول به عنوان کلید خارجی در جدول دوم هست. حالا تو فرمم یه گرید ویو دارم که با کدهای زیر DataSourceش رو مقدار دهی می کنم.

public List<Table1> Read()
{
List<Table1> myTempList = new List<Table1>();
using (var context = new testDBEntities())
{
myTempList = (from x in context.Table1 select x).ToList();
}
return myTempList;
}



DBSrv DBService = new DBSrv();
employeeGridView.DataSource = DBService.Read();


تیکه کد اول در کلاس DBSrv تعریف شده
حالا وقتی اجرا می کنم خطای تصویر زیر رو بهم می ده
131712

من از ویژوال استودیو 2013 و EntityFramework 5 و .net Framework 4 و sql server 2008استفاده می کنم

anubis_ir
چهارشنبه 06 خرداد 1394, 19:24 عصر
شما نياز داري كه با مفاهيم lazy loading (http://www.dotnettips.info/post/840/ef-code-first-10) و reager loading آشنا بشي. كاري كه انجام دادي اصطلاحا lazy loading هست. بعد زمانيكه using به پايان مي‌رسه، context شما dispose ميشه. اما داخل گريد مي‌خواي از اطلاعات اين ليست به صورت هنوز متصل استفاده كني. بنابراين نياز هست اون اطلاعات رو eager load كني. يعني از متد Include بايد استفاده كني، براي واكشي اجباري مقاديري كه نياز داري.

fa_karoon
چهارشنبه 06 خرداد 1394, 20:39 عصر
دوست عزیز ممنون از پاسختون. هر چند من یه کم گیج شدم و نمی دونم الان باید چه کاری انجام بدم
نکته جالب اینجاست که من این کارها رو از روی فیلم آموزشی که آقای صادقیان تو سایت گذاشته بودن انجام دادم ایشون تو فیلمشون اطلاعات رو نشون می دن و به این خطا هم برنمی خورن. آخه چرا من که دقیقا شبیه همون فیلم انجام می دم!

fa_karoon
پنج شنبه 07 خرداد 1394, 00:22 صبح
من همین کار رو در vs 2010 انجام دادم مشکلی نداشت و خطا نمی ده!
حالا می بینیم که مثل عکس زیر یه ستون هم برای جدول 2 می ذاره. چه جوری می شه گرید رو پر کنید جوری که ستونی برای جدول 2 در نظر نگیره و فقط ستون های جدول 1 باشند؟
مرسی و تشکر
131724

SabaSabouhi
پنج شنبه 07 خرداد 1394, 07:33 صبح
دوست عزیز ممنون از پاسختون. هر چند من یه کم گیج شدم و نمی دونم الان باید چه کاری انجام بدم
نکته جالب اینجاست که من این کارها رو از روی فیلم آموزشی که آقای صادقیان تو سایت گذاشته بودن انجام دادم ایشون تو فیلمشون اطلاعات رو نشون می دن و به این خطا هم برنمی خورن. آخه چرا من که دقیقا شبیه همون فیلم انجام می دم!

سلام
توضیح دوستمون anubis_ir کاملاً درسته. شما باید یه سری مفاهیم رو مطالعه کنی تا به این جور مشکل‌ها نخوری.
تو EF باید بدونی که اون شی‌ای که گرفتی یه‌جورایی به Context ارتباط داره. وقتی context رو می‌بندی، این ارتباط قطع می‌شه.
حالا اگه بخوای تو یه using دیگه ازش استفاده کنی، شی مورد نظرت نمی‌تونه با Context جدید ارتباط بر قرار کنه.
برای این کار دو راه داری،
یکی این که همونطور که دوستمون anubis_ir تو پستش نوشته، از include استفاده کنی، و شی دوم رو همون‌جا بگیری
که نیازی به استفاده از Context جدید نباشه، و یا این که شی اولی رو دوباره از database بخونی.

صبا صبوحی