PDA

View Full Version : سوال: عدم ثبت تغییرات در دیتابیس بوسیله Entity Framework



Simorgh_94
چهارشنبه 26 فروردین 1394, 18:54 عصر
سلام و خسته نباشید به تمام دوستان
تغییراتی در بانک توسط entity انجام میدم ( اضافه حذف ویرایش ) و تغییرات صورت میگیره الیته نه روی بانک یعنی وقتی برنامه رو می بندم رکوردی اضافه و نه ویرایش و نه حذف شده
کد اضافه کردن رکورد :

ExampleDBEntities2 DB = new ExampleDBEntities2();


Student Record = new Student
{


Id = Convert.ToInt16(txtID.Text),
Name = txtName.Text,
LastName = txtLName.Text


};
DB.Students.Add(Record);
DB.SaveChanges();
dataGridView1.DataSource = DB.Students.ToList();

هرچی جستجو می کنم روشی برای حلش بیدا نمی کنم
روش حلش چیست ؟
بیشابیش ممنون :بوس:

SabaSabouhi
پنج شنبه 27 فروردین 1394, 08:08 صبح
سلام و خسته نباشید به تمام دوستان
تغییراتی در بانک توسط entity انجام میدم ( اضافه حذف ویرایش ) و تغییرات صورت میگیره الیته نه روی بانک یعنی وقتی برنامه رو می بندم رکوردی اضافه و نه ویرایش و نه حذف شده
کد اضافه کردن رکورد :

ExampleDBEntities2 DB = new ExampleDBEntities2();


Student Record = new Student
{


Id = Convert.ToInt16(txtID.Text),
Name = txtName.Text,
LastName = txtLName.Text


};
DB.Students.Add(Record);
DB.SaveChanges();
dataGridView1.DataSource = DB.Students.ToList();

هرچی جستجو می کنم روشی برای حلش بیدا نمی کنم
روش حلش چیست ؟
بیشابیش ممنون :بوس:

سلام
1. ساخت Context رو توی using انجام بده


using ( var db = new ExampleDbEntities2() ){
}

2. در صورتی که Id شما Identity هست، بهش مقدار نده
3. بجای Add باید از AddObject استفاده کنی


db.Students.AddObject( student );



4. سعی کن، ارتباط با دیتابیس و نمایش خروجی رو تو یه متد انجام ندی، و کم‌کم تمرین کنی که لایه‌ها رو از هم جدا کنی.

صبا صبوحی

Simorgh_94
پنج شنبه 27 فروردین 1394, 09:46 صبح
دوست عزیز ممنون برای باسخ اما دو نکته :
1 : متد Addobject در نسخه های 2012 و 2013 به add تبدیل شده
2 : using(){} استفاده کردم ولی رکوردی در بانک ذخیره نشده
باز هم ممنون

نکته : من از نسخه Visual Studio 2013 استفاده میکنم

SabaSabouhi
پنج شنبه 27 فروردین 1394, 10:30 صبح
دوست عزیز ممنون برای باسخ اما دو نکته :
1 : متد Addobject در نسخه های 2012 و 2013 به add تبدیل شده
2 : using(){} استفاده کردم ولی رکوردی در بانک ذخیره نشده
باز هم ممنون

نکته : من از نسخه Visual Studio 2013 استفاده میکنم

سلام
حق با شماست، البته ربطی به نسخه‌ی Vs نداره به نسخه‌ی EF مربوطه. من چون مجبورم بر اساس DotNetFramework 4.0 کد بنویسم ( که روی XP هم اجرا بشه ) عادت کردم به
AddObject.

کد شما به ظاهر کاملاً درسته. اگه وارد دیتابیس نشه، باید خطا بده که ظاهراً خطا هم نمی‌ده.
پس گمان من بر این هست که مشکل شما Cache مربوط به EF باشه. که بجای خواندن مستقیم از دیتابیس، داره از Cache می‌خونه
Property مربوط به Lazy Loading مربوط به ObjectContext خودتون رو false کنید. احتمالاً باید مشکل حل بشه.

صبا صبوحی

Simorgh_94
پنج شنبه 27 فروردین 1394, 21:42 عصر
پس گمان من بر این هست که مشکل شما Cache مربوط به EF باشه. که بجای خواندن مستقیم از دیتابیس، داره از Cache می‌خونه
Property مربوط به Lazy Loading مربوط به ObjectContext خودتون رو false کنید. احتمالاً باید مشکل حل بشه.

صبا صبوحی

بیداش نمی کنم نمی دونم کجاست :ناراحت::افسرده:

alibilgats
جمعه 28 فروردین 1394, 00:09 صبح
دوست عزیز بانک اطلاعاتی شما access هستش یا SQL ؟

Simorgh_94
جمعه 28 فروردین 1394, 09:36 صبح
دوست عزیز بانک اطلاعاتی شما access هستش یا SQL ؟
بانکی ک کار می کنم SQL هستش

فکر می کنم طبق گفته ی خانوم صبا صبوحی مشکل از ذخیره نشدن cache موجود در entity بر روی بانک هست و اگر چنین مشکلی باشه سوال اینه ک چطور می شه chace رو بر روی بانک ذخیره کرد

mrprestige
جمعه 28 فروردین 1394, 11:45 صبح
سلام و عرض ادب خدمت شما دوست عزیز ، در تایید فرمایشات جناب Sabouhi فکر میکنم شما یه قسمت کار رو اشتباه کردید اونم توی سه خط آخر فکر کنم به این شکل تغییرشون بدید درست بشه


DB.Student.InsertOnSubmit(Record);
DB.submitChanges();
Datagridview1.dataSource=DB.Student;



به همین سادگی اطلاعات شما داخل بانکتون ثبت میشه و در عین حال داخل دیتاگرید

موفق باشید.

Simorgh_94
جمعه 28 فروردین 1394, 12:11 عصر
DB.Student.InsertOnSubmit(Record);
DB.submitChanges();
Datagridview1.dataSource=DB.Student;


به همین سادگی اطلاعات شما داخل بانکتون ثبت میشه و در عین حال داخل دیتاگرید

موفق باشید.
ممنون از باسخ دوستان
دوست عزیز چنین متدی وجود نداره:افسرده::ناراحت:

Simorgh_94
جمعه 28 فروردین 1394, 14:21 عصر
کد هارو در نسخه ی 2010 بدون مشکل اجرا می کنم و رکورد به درستی در بانک ذخیره می شود ولی در نسخه ی 2013 رکورد در cache entity ذخیره می شود .
البته امکان داره به نسخه ی استادیو مربوط نباشد , در نسخه ی جدید entity اطلاعات برای سریع لود شدن ابتدا در کش ذخیره شوند بعد در بانک .
و سوال اینکه چه طور در نسخه ی جدید entity چگونه اطلاعات رو از کش به بانک انتقال بدیم ؟
و ممنون از تمام دوستان

SabaSabouhi
شنبه 29 فروردین 1394, 08:24 صبح
بیداش نمی کنم نمی دونم کجاست :ناراحت::افسرده:

سلام
emdx رو باز کن، در صفحه‌ی propertyها پیداش می‌کنی.

صبا صبوحی

Simorgh_94
سه شنبه 15 اردیبهشت 1394, 16:56 عصر
سلام و خسته نباشین به تمام دوستان
بعد از مدت ها توانستم مشکلمو بیدا کنم و حالا دلیل مشکل و رفعش رو میگم ک اگه برای کسی از دوستان چنین مشکلی بیش امد بتواند مشکلش را حل کند .
اول از همه دلیل مشکل : ارطبات غلط entity با بانک اطلاعاتی => من بانک اطلاعاتی رو با خود استادیو درست و بعد به یک مدل entity ایجاد میکردم و مشکل هم ایجاد کردن بانک با استادیو بود :لبخندساده:
و در اخر حل مشکل : بانک اطلاعاتی خودتان را با برنامه هایی مانند sql server microsoft ایجاد کنید و بعد یک مدل entity ایجاد کنید
با تشکر از همه دوستان