PDA

View Full Version : توضیحاتی در مورد entity framework



electro_esma
جمعه 27 آبان 1390, 20:45 عصر
این توضیحات رو چند روز قبل یعنی درست بعد از شروع بحث جالب آموزش توسط استاد gwbasic تو یه سایت خوندم گفتم بذارم دوستان هم استفاده کنن.

مطالب عینا از سایت نقل شده . دلیل اینکه برای اینکار فقط لینک معرفی نکردم اینه که دوستان با ورود به پست حداقل یه نگاه اجمالی به این موضوع داشته باشن.

آدرس سایت: http://irmeta.com/meta/index.php?topic=6232.0
بخش 1

مقدمه
مایکروسافت قبل از معرفی Entity Framework ، تکنولوژیهای ado , rdo و سرانجام ado.net را ارایه کرده بود و برای اکثر این تکنولوژیها زمان زیادی گذاشته بود ، هر کدام از اینها در زمان خود یک تکنولوژی نوینی و حرکت عظیمی بود . اما با گسترش مفاهیم شی گرایی و نیاز مبرم برنامه نویسان به ایجاد اشیا از داده ها و جداول بانکهای اطلاعاتی مایکروسافت اقدام به توسعه تکنولوژی ado.net کرد و ابتدا امکانات linq و سپس Entity Framework را برای تعامل بهتر با شی گرایی مطرح کرد .

تا قبل از آن برنامه نویسان زمان زیادی را برای برنامه نویسی اشیا جدولهای بانکهای اطلاعاتی و ارتباطات آن صرف می کردند و هر گونه تغییر در جداول بانکها مستلزم تغییرات فراوانی در کد نویسی است .

ابتدا فهرستی از ابزارهای مدل سازی را معرفی می کنم :



1-ERM یا Entity Relationship Model ابزاری برای مدل سازی پایگاههای داده ای رابطه ای .

2- UML یا Unified Modeling Language زبان استاندار ماژول سازی اشیا و کلاسها

3-ORM یا Object-Relational Mappingروشی و ابزاری برای ایجاد تعامل ماژولار میان اشیا بانکهای اطلاعاتی رابطه ای و زبانهای برنامه نویسی شی گرا

4-DFD یا Data Flow Diagram ابزاری برای نمایش نموداری از جریان داده ها و فرآیند سیستم



البته چند ORM دیگر هم وجود دارد یکی NHibernate و SPRINT.net هر دوتای آنها از جاوا مشتق شده اند و توانمنیدهای فراوانی دارند اما بحث ما Entity Framework.Net4 است .

البته لیست بالا لیست کاملی نیست و از حوصله این بحث خارج است .



قبل از ورود به بحث Entity Framework مقدمه ای در مورد Entity Data Model یا مختصرا EDM باید بیان شود .EDM در حقیقت پایه و پیش نیاز Entity Framework است و شامل سه model است

1-مدل مفهومی 2-مدل منطقی 3-مدل ذخیره سازی یا فیزیکی

ما می توانیم بگوییم که EDM یک نسخه تکامل یافته ERM است .ما در مدل EDM در مورد ساختار شی گرای business objects داده ها بحث می کنیم در حالی که در مدل ERM ما در مورد طرح بانک اطلاعاتی بحث می کنیم .که باید تفاوت میان مدل داده و مدل شی را متوجه شویم ، شکل زیر یک مدل داده را نشان می دهد در حالی که شکل بعدی مدل شی گرا از بانک اطلاعاتی ما را نشان می دهد.

electro_esma
جمعه 27 آبان 1390, 20:49 عصر
78025

Entity چیست ؟

ما برای فهم Entity Framework باید ابتدا مفهوم Entity را متوجه شویم ، البته بعدا در مورد این مفصلا خواهم نوشت ولی فعلا برای فهم بیشتر مقایسه ای با object و relational data انجام می دهم

تشابه Entity با شی یا object

1- Entity مانند شی دارای انواع تعریف شده برای داده ها و فیلدها است

2- Entity مانند شی دارای خصوصیت یا properties است

3- هر Entity یک هویت متمایزی دارد

4- یک خصوصیت Entity می تواند ارجاعی به Entity دیگر باشد



تفاوت Entity با شی یا object

1 -Entity می تواند یک فیلد اصلی یا primary keys داشته باشد

2-Entity می تواند دارای ارتباطی با Entity دیگر باشدمانند ارتباطات موجود در بانک اطلاعاتی



تشابه Entity با داده رابطه ای relational data

1-Entity یک ارتباط چند گانه مانند داده ها با دیگر entity می تواند داشته باشد

2-Entity مانند داده ها می تواند کلید اصلی یا primary key داشته باشد



تفاوت Entity با داده رابطه ای relational data

1-Entity از داده ها با نوع پیچیده complex typesپشتیبانی می کند

2-Entity از وراثت موجود در کلاسها پشتیبانی می کند

3-Entity داده های فیزیکی را ذخیره نمی کند .



پس Entity Framework چیست ؟

درواقع Entity Framework تکنولوژی توسعه یافته ADO.Net است که فاصله بین برنامه نویسی شی گرایی و بانک اطلاعاتی رابطه ای را پر می کند .این فاصله معمولا تحت عنوان عدم تطابق شناخته می شود. و یک تکنیک برنامه نویسی برای تبدیل ارتباطات در Database به مفاهیم Object Oriented در برنامه نویسی است. در واقع می‌توان گفت که کلا‌س ها را به Table ها map می‌کند. وقتی که شما می‌خواهید به Database دسترسی پیدا کنید، یا اطلاعاتی را ذخیره کنید، این کارها را مستقیما بر‌ روی اشیاء ( Object تان ) انجام می‌دهید. Entity Framework مدل داده ها را به سه بخش تقسیم می کند 1-مدل مفهومی یا ادراکی 2-مدل منطقی 3- مدل فیزیکی


پایان بخش اول

haniyehghassami
جمعه 27 آبان 1390, 22:42 عصر
وای مرسی
چه باحال بودن
برم امتحانشون کنم یاد بگیرم
بازم ممنونم:چشمک:

electro_esma
شنبه 28 آبان 1390, 17:32 عصر
بخش دوم


در بخش قبل معرفی مختصر در مورد Entity Data Moule یا مخفف EDMداشتیم ، اما در این بخش به شرح مفصلتری می پردازم

قبل از آن شما بانک اطلاعاتی northwind را آماده کنید فایل این بانک را می توانید ازلینک دانلود کنید

ایجاد یک EDM

در نسخه های قبلی Entity Framework ما فقط می توانستیم برای بانک اطلاعاتی موجود از قبل یک مدل طراحی کنیم .که ما می توانستیم برای آن یک مدل مفهومی ایجاد کنیم .درواقع ما از بانک اطلاعاتی به مدل می رسیدیم ، اما حالا می خواهیم برعکس از مدل به بانک اطلاعاتی برسیم .

از مهمترین امکانات اضافه شده به Entity Framework 4 بصورت 2 مورد زیر است :

1-Model-first : به شما اجازه می دهد که ابتدا یک empty model ایجاد کنید ، و ابتدا model خودتان را تعریف کنید و سپس بانک اطلاعاتی و mapping و کلاسها را بر اساس model تعریف شده ایجاد کنید .

2-Code-only: به شما اجازه می دهد که برای استفاده از Entity Framework با استفاده از Plain Old CLR Objects یا مختصرا

POCO درواقع Entity خود را بدون استفاده از فایل EDMX ایجاد کنید .

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

آموزش حالت database-first approach

ما در اینجا با بانک اطلاعاتی northwind آموزش را ارایه می دهم با sql-server 2008 R2 و Visual Studio 2010 و دانت نت 4

شما می توانید از لینک زیر بانک اطلاعاتی را دانلود کنید .

خوب اکنون پس از نصب بانک اطلاعاتی سراغ vs برویم و یک پروژه Windows Forms Application ایجاد می کنیم مطمن باشید که .Net Framework 4 انتخاب شده باشد.

اکنون در پروژه ، سراغ منوی Project بروید و گزینه Add New Item را انتخاب کنید مانند شکل زیر

78084

در شکل بالا دقت کنید که از قسمت سمت راست گزینه data را انتخاب کنید و سپس گزینه ADO.NET Entity Data Model

را انتخاب کنید .با انتخاب این گزینه و وارد کردن نام مناسب ( در اینجا ما همان نام Model1.edmx را بصورت پیش فرض قبول می کنیم ) و دکمه Add را می زنیم .پس از آن وارد ویزارد Entity Data Model Wizard می شویم در این ویزارد ما گزینه

Generates from database را انتخاب می کنیم و به مرحله بعدی می رویم .در این صفحه مطابق شکل زیر :


78085

ما ابتدا باید مقدار connections را مشخص کنیم پس بر روی دکمه New Connection کلیک کنید تا وارد صفحه Connection Properties بشوید در این صفحه ابتدا از قسمت نام سرور server name نام سرور بانک اطلاعاتی را انتخاب کنید و برحسب تنظیمات دستگاه شما از لیست بانکهای اطلاعاتی نام بانکnorthwind را انتخاب کنید .صفحه ویزارد شما مشابه شکل زیر خواهد شد .در این صفحه تیک مقابل جمله save entity connection ….. باعث می شود که رشته اتصال به بانک اطلاعاتی با همان نام مشخص شده در زیر آن در فایلی تحت عنوان App.config ذخیره شود .اکنون به مرحله بعد می رویم مطابق شکل زیر

78086


خوب اکنون در صفحه بالا جدولهای و view ها و stored Procedure های بانک اطلاعاتی شما لیست می شوند.

در اینجا ما جدول Category و جدول products را انتخاب می کنیم و از قسمت view ها Products by Category را انتخاب می کنیم همچنین از stored procedure هم SalesByCategory را انتخاب می کنیم . و سپس دکمه finish را کلیک می کنیم .

نکته : حتما قبل از زدن دکمه finish دو تیک Pluralize و include foreign… را دیدید

Pluralize or singularize از مهمترین بهبودها در نسخه 4 EF است .در نسخه های قبلی EF خاصیت

Entity Set Name and Entity Name properties با یک نام بودند که این مساله باعث گیجی برنامه نویس می شد که خوشبختانه در این نسخه 4 امکان تفکیک براحتی فراهم شده است مثلا برای

category به شکل زیر دفت کنید


78088



و در نهایت شما فایل module1.edmx را باز کنید که مطابق شکل زیر نمای جداول بانک اطلاعاتی رادر فضای ماژولار EDM نمایش می دهد ،


78089

haniyehghassami
یک شنبه 29 آبان 1390, 00:38 صبح
سلام
ممنون از اموزشتون
یه سوال؟
ایا توی دیزاین این مدل ها میشه رابطه های یک به چند و ... هم تعریف کرد؟

electro_esma
دوشنبه 30 آبان 1390, 20:14 عصر
بخش سوم

Model-First Approach
در مطالب قبلی در مورد Entity و نحوه استفاده از ویزارد برای تولید کلاس در صورت وجود بانک صحبت کردم ، اما امروز می خواهم در مورد حالتی صحبت کنم که ما مدل کلاسها را ترسیم می کنیم و از این مدل می خواهیم بانک اطلاعاتی را ایجاد کنیم ، این ویژگی از جالبترین و مهمترین ویژگیهای اضافه شده در EF4 است که مایکروسافت آن را اضافه کرده است .

مانند مقاله بخش 2 ، یک پروژه تحت ویندوز باز کنید ،از منوی Project کزینه Add New Item و سپس گزینه ADO.NET Entity Data Model را انتخاب کنید اما از پنجره ظاهر شده در زیر گزینه empty model را انتخاب کنید

78208

ماژول خالی برای شما ایجاد می شود ، اکنون جعبه ابزار را باز کنید و ابزار زیر را مشاهده کنید

78209

ابزارهایی را مشاهده می کنید که مختصرا آنها را توضیح می دهم.

Entity : به شما اجازه می دهد که یک Entity را ایجاد و طراحی کنید

Association : برای تعریف و ایجاد روابط میان دو عنصر Entity

Inheritance : برای ایجاد رابطه وراثت بین عناصر و کلاسهای Entity

زیاد نگران نباشید در ادامه مفصلا در مورد سه عنصر بالا توضیح خواهم داد. فعلا هدف آشنایی کلی با مفاهیم است .پس اکنون دست به کار می شویم و اولین entity را با استفاده از جعبه ابزار ایجاد می کنیم .یک Entity را از جعبه ابزار انتخاب کنید و آن را با کشیدن و رها کردن بر روی صفحه خالی ماژول بیاورید .

78210


اکنون به اولین Entity ایجاد شده دقت کنید .

. یک properties دارد با نام Id است علاوه بر آن این خصوصیت یک primary Key برای این Entity ایجاد شده است .شما می توانید با انتخاب آن از شکل خصوصیات و پارامترهای آن را عوض کنید .پس از تنظیم پارامترهای دلخواه ، شما می توانید بر حسب نیازتون عناصر دیگری به Entity اضافه کنید . برای اینکار کافیست برروی Entity کلیک راست کنید و گزینه Add را انتخاب کنید .


78211


اگر دقت کنید با دو گزینه scalar property , complex property مواجه می شویم ، شما نگران نباشید از بخش بعدی یعنی بخش چهارم وارد جزییات خواهیم شد و موارد را به تفصیل شرح خواهم داد .

اکنون شما گزینه scalar property را انتخاب کنید نام آن را CustomerFirstName قرار دهید و نوع آن یعنی Type را از نوع کارکتری یعنی string انتخاب کنید و بقیه را مطابق شکل زیر

78212

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

CustomerLastName (String)

CustomerAddress (String)

CustomerCity (String)

CustomerState (String)

CustomerZipCode (String)

CustomerPhone (String)

ModifyDateTime (DateTime)

سپس یک Entity دیگر ایجاد کنید و عناصر زیر را به آن اضافه کنید

OrderID (int32)

CustomerID (int32)

ItemID (int32)

ModifyDateTime (DateTime)

اکنون ما 2 Entity داریم ، حالا می خواهیم یک ارتباط بین این 2 برقرار کنیم برای اینکار از جعبه ابزار Associtation را انتخاب کنید و سپس از Entity1 فیلد Id را انتخاب کنید و از Entity2 فیلد customerId را انتخاب کنید رابطه شما بین این دو فیلد مانند شکل زیر خواهد شد .

electro_esma
دوشنبه 30 آبان 1390, 20:18 عصر
ادامه پست 6..

78213

اکنون نوبت ایجاد بانک اطلاعاتی از مدول و کلاسهای بالا است . اکنون بر روی فضای خالی از صفحه مازول کلیک راست بزنید و گزینه Generate Database From Model را انتخاب کنید صفحه زیر نمایش داده می شود .

78214

در اینجا شما باید بانک اطلاعاتی و رشته اتصال را مشخص کنید .دکمه next را بزنید و به مرحله بعد بروید صفحه ای برای شما نمایش داده می شود که مجموعه دستورات DDl را برای ایجاد این جدولها در بانک اطلاعاتی را بصورت فایلی ذخیره می کند .

78215


دکمه Finish را کلیک کنید تا فایل مورد نظر شما ایجاد شود که حاوی کدهایی برای ایجاد بانک اطلاعاتی است .یک فایلی با فرمت .sql خواهد بود ، همانطور که در شکل بالا می بینید .اکنون برای اجرای اسکریپت بالا در فضای خالی از کد اسکریپت کلیک راست کرده و گزینه Execute Sql را مطابق شکل زیر انتخاب کنید ، اسکریپت شما در بانک اطلاعاتی مشخص شده ایجاد خواهد شد


78216

به بانک اطلاعاتی خودتان بروید تا جدولهای ایجاد شده را مشاهده کنید .

ادامه دارد..

سوداگر
چهارشنبه 02 آذر 1390, 01:23 صبح
سلام!
چند تا سوال در مورد Entity Framework داشتم.:خجالت:

و یک تکنیک برنامه نویسی برای تبدیل ارتباطات در Database به مفاهیم Object Oriented در برنامه نویسی است. در واقع می‌توان گفت که کلا‌س ها را به Table ها map می‌کند.

تا چه حدی از مفاهیم شیءگرایی استفاده میکند؟ (3 رکن اصلی شیءگرایی را می گویم)
به Table ها map می‌کند یعنی چی؟


وقتی که شما می‌خواهید به Database دسترسی پیدا کنید، یا اطلاعاتی را ذخیره کنید، این کارها را مستقیما بر‌ روی اشیاء ( Object تان ) انجام می‌دهید.

آیا این دسترسی مستقیم که گفتید به معنای "معماری متصل" است که در ADO.Net، کنار گذاشته شد؟
آیا مزایای معماری غیر متصل، که از DataSet استفاده میکند را دارد؟ (مثلا به جای اینکه 10 نفر همزمان از پایگاه استفاده کنند، 100 نفر استفاده کنند). اگر دارد، چگونه و اگر نه، آیا محدودیت تلقی نمیشود؟
ممنون از ایجاد این تاپیک.

omidh2007
چهارشنبه 02 آذر 1390, 22:05 عصر
سلام . اگه Relation ها رو توی SQL Server (دیتا بیس اصلی) مشخص کنم بهتره یا این که
توی EF Class ؟

water_lily_2012
پنج شنبه 01 دی 1390, 14:36 عصر
سلام
این روشی که شما فرمودید برای SQL Express عملی نیست؟
در هنگام Generate Database From Model من نوع پایگاه داده را SQL Server DataBaseFile انتخاب کردم و در هنگام Execute Sql دچار خطا شد. البته خود فایل .mdf را ساخت ولی جداول ایجاد نشد.

سوداگر
یک شنبه 04 دی 1390, 01:07 صبح
این روشی که شما فرمودید برای SQL Express عملی نیست؟

این مطلب رو ایشون نفرموده بودن!
در همون پست اول ایشون گفت که مطالبی که اینجا میذاره رو از اون سایت می گیره!
تقریبا میشه گفت که کپی پیست مطالب توی سایت هست. البته کپی پیست خیلی هم خوبه چون ایشون با شجاعت تمام لینک اصلی رو گذاشتن و مثل بعضی ها مطالب رو به اسم خودشون تموم نکردن.

water_lily_2012
یک شنبه 04 دی 1390, 15:50 عصر
سلام
دوست عزیز
حالا چرا ناراحت می شوید. من اصلا کاری به اینکه ایشون نوشته اند یا لینک هست، ندارم. این هم که نوشتم " شما فرمودید" می خواستم در صحبت احترام گذاشته باشم.
من این تاپیک را خوندم و یک سوال برایم پیش آمد. هر کسی هم بلد هست لطف کنه جواب بده.
در ضمن من که یادم نمی یاد مطلبی را به نام خودم زده باشم که شما این مطلب را نوشته اید.

سوداگر
یک شنبه 04 دی 1390, 20:16 عصر
در ضمن من که یادم نمی یاد مطلبی را به نام خودم زده باشم که شما این مطلب را نوشته اید.
اصلا قصد جسارت نداشتم:خجالت:.منظورم از بعضی ها، بعضییییها بود:گیج:
این که یادآوری کردم که اون لینک اصلی مطالب هست منظورم این بود که این جا منتظر جواب موندن تقریبا بیهوده است، منم بیش از یک ماهه که سوال پرسیدم جوابی نشنیدم:ناراحت:
امیدوارم سوء تفاهمی پیش نیومده باشه.

fakhravari
پنج شنبه 08 دی 1390, 02:24 صبح
ادامه نداره پست؟

سوداگر
پنج شنبه 08 دی 1390, 02:33 صبح
ادامه نداره پست؟

همه اش همین بود (http://irmeta.com/meta/index.php?topic=6232.0)

fakhravari
پنج شنبه 08 دی 1390, 11:05 صبح
یه سمپل ندارید که چند جدول از این روش Inser , update , ... میشوند:خجالت:

hadi-z
دوشنبه 19 دی 1390, 16:44 عصر
سلام
من تو پروژه ام از EF استفاده کردم ولی با یک مشکل مواجه شدم
بعد از اضافه کردن فایل edmx به پروژه وقتی اونو اجرا می کنم یه پیغام خطا میده:
Invalid token 'void' in class, struct, or interface member declaration

کسی میتونه منو راهنمایی کنه که چرا این ارور رو میده و راهکاری براش هست یا نه؟
پیشاپیش ممنون.

modern_amin
پنج شنبه 18 اسفند 1390, 11:09 صبح
دوستان از این فناوری جواب گرفتین...؟
مزیتش چیه؟
.
دوستان سمپلی دارین؟

jmfnima
چهارشنبه 24 اسفند 1390, 22:23 عصر
با سلام به همه دوستان
اگه بانک اطلاعاتی اکسس باشه آیا میشه از EF هم استفاده نمود ؟؟؟

محمدامین شریفی
جمعه 04 فروردین 1391, 21:58 عصر
با سلام.

من از EF و LAMBDA توی یک پروژه ی بزرگ تجاری به روش زیر استفاده کردم.

1) برای select از lambda استفاده کردم.
2) برای Create, Update, Delete از این روش استفاده کردم:
http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executestorecomm and.aspx
3) برای join های بزرگ هم از این روش استفاده کردم:
http://msdn.microsoft.com/en-us/library/bb387145.aspx


با سلام به همه دوستان
اگه بانک اطلاعاتی اکسس باشه آیا میشه از EF هم استفاده نمود ؟؟؟
خیر، SQL 2005 به بالا.


دوستان از این فناوری جواب گرفتین...؟

بله، در یک پروژه ی WPF با داده های زیاد
در یک فروشگاه الکترونیک با asp.net



مزیتش چیه؟

استفاده از LAMBDA و LINQ
تبدیل جداول به کلاس های #C


دوستان سمپلی دارین؟
شما با Entity designer در مرحله اول، زیاد سر و کار ندارید، کار اصلی شما واکشی از EF است که با کمک LINQ یا LAMBDA این کار را انجام می دهید.
http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
برای تبدیل LINQ به LAMBDA از نرم افزار های زیر می شود استفاده کرد
http://www.linqpad.net
http://www.sqltolinq.com
اولین نرم افزار بهتر است.

سلام
من تو پروژه ام از EF استفاده کردم ولی با یک مشکل مواجه شدم
بعد از اضافه کردن فایل edmx به پروژه وقتی اونو اجرا می کنم یه پیغام خطا میده:
Invalid token 'void' in class, struct, or interface member declaration

کسی میتونه منو راهنمایی کنه که چرا این ارور رو میده و راهکاری براش هست یا نه؟
پیشاپیش ممنون.
من به این خطا بر نخوردم، کل ENTITY را پاک کن و از دوباره از دیتا بیس بگیر.
اگر این کار عملی نیست، دلیلش را بگو تا من هم یاد بگیرم.

یه سمپل ندارید که چند جدول از این روش Inser , update , ... میشوند:خجالت:
http://www.dotnetspark.com/kb/2737-entity-framework-sample-crud-operations.aspx

saeid taheri
دوشنبه 07 فروردین 1391, 16:40 عصر
با سلام
من در پرکردن گرید از Linq و EF استفاده می کنم ولی هنگامی که می خواهم روی هر کدام از ردیف های گرید کار کنم دچار مشکل می شوم ، کدهای برنامه در زیر است

private void RefreshData()
{
DataContext.Context.Refresh(RefreshMode.StoreWins, DataContext.Context.Persons);
grdPersons.DataSource = (from p in DataContext.Context.Persons
join pt in DataContext.Context.PersonType on p.PersonTypeID equals pt.PersonTypeID
select new
{
p.fName,
p.lName,
p.pName,
p.ShenasnameID,
p.Phone,
p.Mobile
} ).ToList();
}


private void btnEdit_Click(object sender, EventArgs e)
{
if(grdPersons.SelectedRows.Count !=0)
{
//در خط زیر اشکال دارم
Persons objPerson = (Persons)grdPersons.CurrentRow.DataBoundItem;
ShowEdit(objPerson, false);
}
}



private void ShowEdit(Persons objPerson,bool addingPerson)
{
EditPersonForm objEditPersonFrom = new EditPersonForm();

objEditPersonFrom.personsBindingSource.DataSource = objPerson;
if (!addingPerson)
{
objEditPersonFrom.PersonID1 = objPerson.PersonID;
objEditPersonFrom.imgPerson.ImageLocation = objPerson.Picture;
}
if (objEditPersonFrom.ShowDialog() == DialogResult.OK)
{
objPerson.Jensiat = objEditPersonFrom.cmbJens.Items[objEditPersonFrom.cmbJens.SelectedIndex].ToString();
objPerson.Picture = objEditPersonFrom.imgPerson.ImageLocation;
objEditPersonFrom.personsBindingSource.EndEdit();
if(addingPerson)
DataContext.Context.Persons.AddObject(objPerson);
try
{
DataContext.Context.SaveChanges();
}
catch{}
}
else
{
objEditPersonFrom.personsBindingSource.CancelEdit( );
}
RefreshData();
}

محمدامین شریفی
جمعه 18 فروردین 1391, 10:35 صبح
با سلام
من در پرکردن گرید از Linq و EF استفاده می کنم ولی هنگامی که می خواهم روی هر کدام از ردیف های گرید کار کنم دچار مشکل می شوم ، کدهای برنامه در زیر است

private void RefreshData()
{
DataContext.Context.Refresh(RefreshMode.StoreWins, DataContext.Context.Persons);
grdPersons.DataSource = (from p in DataContext.Context.Persons
join pt in DataContext.Context.PersonType on p.PersonTypeID equals pt.PersonTypeID
select new
{
p.fName,
p.lName,
p.pName,
p.ShenasnameID,
p.Phone,
p.Mobile
} ).ToList();
}


private void btnEdit_Click(object sender, EventArgs e)
{
if(grdPersons.SelectedRows.Count !=0)
{
//در خط زیر اشکال دارم
Persons objPerson = (Persons)grdPersons.CurrentRow.DataBoundItem;
ShowEdit(objPerson, false);
}
}



private void ShowEdit(Persons objPerson,bool addingPerson)
{
EditPersonForm objEditPersonFrom = new EditPersonForm();

objEditPersonFrom.personsBindingSource.DataSource = objPerson;
if (!addingPerson)
{
objEditPersonFrom.PersonID1 = objPerson.PersonID;
objEditPersonFrom.imgPerson.ImageLocation = objPerson.Picture;
}
if (objEditPersonFrom.ShowDialog() == DialogResult.OK)
{
objPerson.Jensiat = objEditPersonFrom.cmbJens.Items[objEditPersonFrom.cmbJens.SelectedIndex].ToString();
objPerson.Picture = objEditPersonFrom.imgPerson.ImageLocation;
objEditPersonFrom.personsBindingSource.EndEdit();
if(addingPerson)
DataContext.Context.Persons.AddObject(objPerson);
try
{
DataContext.Context.SaveChanges();
}
catch{}
}
else
{
objEditPersonFrom.personsBindingSource.CancelEdit( );
}
RefreshData();
}




grdPersons.DataSource = (from p in DataContext.Context.Persons
join pt in DataContext.Context.PersonType on p.PersonTypeID equals pt.PersonTypeID
select new Person2
{
p.fName,
p.lName,
p.pName,
p.ShenasnameID,
p.Phone,
p.Mobile
} ).ToList();
}

Person2 یه کلاس جدید است.

elhamkhodaei66
سه شنبه 05 دی 1391, 15:15 عصر
سلام ممنون از تاپیکی که گذاشتین
فقط یه سوال داشتم اون هم اینکه زمانی که از Entity Framwork استفاده می کنیم دستورات پشت صحنه ای که اجرا می شوند کجا هستند ؟
مثلا وقتی که با یک دستور ما اطلاعاتی را به جدولی اضافه می کنیم دستورات پشت صحنه ای که این خط دستور ما رو می فهمه و اجر ا می کنه کجاست ؟
ممنون

actros
پنج شنبه 07 دی 1391, 18:06 عصر
سلام ممنون از تاپیکی که گذاشتین
فقط یه سوال داشتم اون هم اینکه زمانی که از Entity Framwork استفاده می کنیم دستورات پشت صحنه ای که اجرا می شوند کجا هستند ؟
مثلا وقتی که با یک دستور ما اطلاعاتی را به جدولی اضافه می کنیم دستورات پشت صحنه ای که این خط دستور ما رو می فهمه و اجر ا می کنه کجاست ؟
ممنون

تو پوشه App_Code یه فایل هم MoeelName.Designer.vb یا cs هست که همه کار ها رو انجام میده
تو خطی که اطلاعات جدید اضافه میکنی یه Break Point بذار ببینی
هیچ وقت این فایل رو تغییر نده چون به محض آپدیت کردن مدل،تغییرات اعمالی از بین میره

علی اکبر
دوشنبه 25 دی 1391, 09:49 صبح
دوستان سلام
من از این روش استفاده کردم اما حالا برای نمایش نیاز به یه فیلد دارم که توضیح بر داده های داخل دیتابیس باشه مثلا اگه ای دی 0 بود بگه منقول واگه 1 بود بشه غیر منقول
باید حتما به مدلم اضافه کنم چون باید در گرید نمایش داده بشه
توی مدل میشه فیلدهای از نوع scaler-navigation and complex اضافه کرد اما نمی دونم چجوری ازشون استفاده کنم وشرطم برارم که اتوماتیک پر بشه
ممنون

Roya.Rashidi
یک شنبه 23 شهریور 1393, 04:33 صبح
سلام . اگه من entity رو یاد بگیرم دیگه نیاز نیست ado.net یاد بگیرم .
و اینکه linq هم همینه ؟؟

parvizwpf
یک شنبه 23 شهریور 1393, 08:58 صبح
اینکه لزوما گفته بشه که دیگه نیازی نیست اونها رو استفاده کنیم هم غلطه. چون گاهی باز نیاز به استفاده اونها در محیط و شرایطش ممکنه پیش بیاد.

Roya.Rashidi
دوشنبه 24 شهریور 1393, 02:01 صبح
اینکه لزوما گفته بشه که دیگه نیازی نیست اونها رو استفاده کنیم هم غلطه. چون گاهی باز نیاز به استفاده اونها در محیط و شرایطش ممکنه پیش بیاد.
خب اینا همشون در نهایت یه کار میکنن که .
قابلیت هاشون مگه فرق داره >

imanx7
پنج شنبه 03 اردیبهشت 1394, 18:11 عصر
خب اینا همشون در نهایت یه کار میکنن که .
قابلیت هاشون مگه فرق داره >

برای تفهیم بهتر فناوری LinQ یا EF بهتره با مفاهیم ADO.net آشنایت نسبی داشته باشین

RezaBehrang
پنج شنبه 24 دی 1394, 19:50 عصر
سلام یه سوال دارم

در Entity فرض کنید یک جدول به نام Test داریم

حالا من یک ردیف با فرمان زیر اضافه کردم

Entity EntObj = new Entity().Test.AddObject(TestObj);

خب اگه عبارت زیر رو اجرا کنم اطلاعات با SQL مثلا synce میشه و دیتابیس آپدیت

EntObj.savechange();

اما سوال من اینه که اگه بخوام قبل از آپدیت کردن دیتابیس از آبجکتهای اضافه شده بصورت موقت در حافظه کوئری بگیرم یا احیانا تغییرشون بدم باید چکار کنم؟