PDA

View Full Version : نحوه نمونه سازی از مدل داده ای Entity FrameWork



negar.rafie
جمعه 08 مرداد 1395, 10:19 صبح
سلام
فرض کنید ما از روی دیتابیس خود یک مدل ساخته ایم
حالا برای استفاده از اون باید یک نمونه ازش بسازیم
به این شکل

PersonDBEntities db = new PersonDBEntities();

حال ایا برای هربار ک مثلا عمل درج یا حذف یا موارد دیگه را انجام میدهیم در هر دکمه باید یک نمونه بسازیم یا نه باید یک نمونه به صورت سراسری بسازیم و در همه جا استفاده کنیم
ممنون

ژیار رحیمی
جمعه 08 مرداد 1395, 13:34 عصر
سلام در سطح هرکلاس مورد استفاده یک نمونه سازی کافیه.البته بعد از درج، ویرایش و با حذف برای دریافت تغییرات از دیتابیس باید نمونه ساخته شده رو Renew کنی تا داده ها مجدد از دیتابیس گرفته و کش شود.میتونی یه نمونه سراسری هم تعریف کنی بستگی به نوع پیاده سازی پروژه شما دارد.اگر لازمه متغییر شما سراسری باشه بصورت سرارسری تعریف کن

negar.rafie
سه شنبه 30 شهریور 1395, 17:18 عصر
ممنون
من حالا به صورت سراسری ساختم
ولی مثلا وقتی فرم چاپ پرنسل را باز میکنم و در همان زمان میرم و مشخصات یکی از پرسنل را ویرایش میکنم تغیرات اعمال شده در دیتایس برای فرم گزارش گیری نمایش داده نمیشه
و باید یک بار فرم گزارش را ببندم و دوباره باز کنم
حالا چکار کنم که این مشکل حل بشه؟

Mahmoud.Afrad
سه شنبه 30 شهریور 1395, 17:31 عصر
ممنون
من حالا به صورت سراسری ساختم
ولی مثلا وقتی فرم چاپ پرنسل را باز میکنم و در همان زمان میرم و مشخصات یکی از پرسنل را ویرایش میکنم تغیرات اعمال شده در دیتایس برای فرم گزارش گیری نمایش داده نمیشه
و باید یک بار فرم گزارش را ببندم و دوباره باز کنم
حالا چکار کنم که این مشکل حل بشه؟

در این فرم گزارش، از ابزار گزارش سازی استفاده کردید یا کنترل ها؟ اگر از کنترل استفاده کرده باشید، میتونید نمونه ای از مدل را که در این فرم ساخته اید به فرم دیگر که وظیفه ویرایش را برعهده دارد ارسال کنید و با این نمونه عمل ویرایش را انجام بدید اگر هم از ابزار گزارش ساز استفاده کرده اید، یک رویداد بنویسید تا در صورت تغییر، فرم گزارش بروز بشه.

mrprestige
سه شنبه 30 شهریور 1395, 18:08 عصر
عرض سلام و احترام ، با کسب اجازه از اساتید محترم جناب Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) و جنابژیار رحیمی (http://barnamenevis.org/member.php?48557-%DA%98%DB%8C%D8%A7%D8%B1-%D8%B1%D8%AD%DB%8C%D9%85%DB%8C)؛

بنده عرض کنم شما در داخل فرم مورد نظر بعد از انجام عملیات ویرایش می تونید از کدهای پایین که براتون نوشتم استفاده کنید که البته این دستور کلی هستند و طبق فرمایشات جناب افراد ، بستگی به این داره که شما از ابزار گزارش گیری استفاده کرده باشید یا از کنترل ها البته این کد بنده هم میاد اول صفحه Form رو بی اعتبار میکنه و دوباره عمل Reload رو انجام میده (برعکس Validate که موجب اعتبار سنجی فرم میشه) .


This.Invalidate();

و یا

This.Update();

بازم پیشاپیش عذر میخوام در جمع اساتید وارد شدم .

پیروز و موفق باشید

negar.rafie
سه شنبه 30 شهریور 1395, 22:09 عصر
ممنون
ببینید فرض کنید ی سری اطلاعات در داخل دیتابیس داریم
حالا ی فرمی را داریم که میاد سرچ انجام میده
حالا وقتی کد 100 را سرچ میکنیم نام علی با فامیلی اسدی برای ما به نمایش در میاد
حالا یک کاربر دیگه حالا فرضا برنامه تحت شبکه است میاد و فامیل کد 100 را تغییر میده به اصغری
حالا تا زمانی که فرم سرچ باز است با اینکه فامیل تغییر کرده ولی در نتیجه سرج باز هم فامیل اسدی برای ما به نمایش درمیاد تا زمانی که فرم را ببندیم و دویاره باز کنیم
مشکلم اینه چطوری رفع کنیم؟
ممنون

Mahmoud.Afrad
چهارشنبه 31 شهریور 1395, 00:36 صبح
سلام
فرض کنید ما از روی دیتابیس خود یک مدل ساخته ایم
حالا برای استفاده از اون باید یک نمونه ازش بسازیم
به این شکل
PersonDBEntities db = new PersonDBEntities();
حال ایا برای هربار ک مثلا عمل درج یا حذف یا موارد دیگه را انجام میدهیم در هر دکمه باید یک نمونه بسازیم یا نه باید یک نمونه به صورت سراسری بسازیم و در همه جا استفاده کنیم
ممنون

https://msdn.microsoft.com/en-us/data/jj729737


ممنون
ببینید فرض کنید ی سری اطلاعات در داخل دیتابیس داریم
حالا ی فرمی را داریم که میاد سرچ انجام میده
حالا وقتی کد 100 را سرچ میکنیم نام علی با فامیلی اسدی برای ما به نمایش در میاد
حالا یک کاربر دیگه حالا فرضا برنامه تحت شبکه است میاد و فامیل کد 100 را تغییر میده به اصغری
حالا تا زمانی که فرم سرچ باز است با اینکه فامیل تغییر کرده ولی در نتیجه سرج باز هم فامیل اسدی برای ما به نمایش درمیاد تا زمانی که فرم را ببندیم و دویاره باز کنیم
مشکلم اینه چطوری رفع کنیم؟
ممنون

میتونید از SqlDependency استفاده کنید. مثال زیر رو ببینید.
https://code.msdn.microsoft.com/How-to-use-SqlDependency-5c0da0b3

negar.rafie
چهارشنبه 31 شهریور 1395, 01:26 صبح
ممنون ولی همون طور که میدونید SqlDependency برای ی کار دیگه ای هستش
اونم برای اینکه مثلا کاربران از تغییرات دیتابیس باخبر بشن
ولی مشکل من ربطی به این نداره
ببینید این مشکل وقتی پیش میاد که نمونه خودم را که از مدل داده ای میسازم به صورت سراسری ایجاد میکنم
اینطوری:
روش اول:

PersonDBEntities db = new PersonDBEntities();

روش دوم:اما وقتی به این صورت در مثلا هرجایی که نیاز دارم ایجاد میکنم وکدهای خودم را حال مثلا سرچ یا هر چیز دیگه ای را داخلش مینویسم مشکلی پیش نمیاد

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


حالا ایا روش دوم مشکلی نداره؟و بهینه است؟که اگر مشکلی نداره از همین روش دوم استفاده کنم
و روش اول را چکار کنیم که مشکل حل بشه

ali_md110
چهارشنبه 31 شهریور 1395, 13:01 عصر
سلام

روش دوم شما مشکلی نداره ولی برای کارایی خوبتر برنامه اینه که کلاسهامون رو تا جاییکه امکان داره در قسمت سراسری وهله سازی نکنیم همچنین متدهای Static رو هم درون کلاسهامون کاهش بدیم یا بکار نبرم و از طریق ترزیق کردن به کلاس این متدها رو استفاده کنیم
و بهینه تر اینه از الگوی واجد کار یا Unit of Work Design Pattern بهمراه الگوی جذاب MVVM استفاده کنید در ضمن Binding و کلاس جنریک ObservableCollection در کنار هم خیلی بکارتون میاد
مباحث DI یا Dependency Injection که گفتم هم میتونه کدهای شما رو بهینه تر کنه

mrprestige
چهارشنبه 31 شهریور 1395, 18:33 عصر
عرض سلام مجدد ، خانم rafie (http://barnamenevis.org/member.php?237705-negar-rafie) روش بهینه تری هم وجود داره مثلا بنده به این روش نمونه سازی میکنم که اول توی کلاس Form یه Property از نوع خود DatabaseContext م میگیرم بعد داخل کنترل مورد نظرم فقط new میکنم که اینطوری فقط حافظه مورد نیاز بهش تخصیص داده میشه دیگه نمیام از اول یه شی بسازم

Public PersonDBEntities Person {Get;Set;}

حالا موقع استفاده از Person

Person =new PersonDBEntities
{
.
.
.
.
.
}




این روشی هست که خودم استفاده میکنم .

negar.rafie
چهارشنبه 31 شهریور 1395, 21:18 عصر
ممنون از همون روش دومی که گفتم استفاده کردم