در بخش قبل معرفی مختصر در مورد 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 را انتخاب کنید مانند شکل زیر :
در شکل بالا دقت کنید که از قسمت سمت راست گزینه data را انتخاب کنید و سپس گزینه ADO.NET Entity Data Model
را انتخاب کنید .با انتخاب این گزینه و وارد کردن نام مناسب ( در اینجا ما همان نام Model1.edmx را بصورت پیش فرض قبول می کنیم ) و دکمه Add را می زنیم .پس از آن وارد ویزارد Entity Data Model Wizard می شویم در این ویزارد ما گزینه
Generates from database را انتخاب می کنیم و به مرحله بعدی می رویم .در این صفحه مطابق شکل زیر :
ما ابتدا باید مقدار connections را مشخص کنیم پس بر روی دکمه New Connection کلیک کنید تا وارد صفحه Connection Properties بشوید در این صفحه ابتدا از قسمت نام سرور server name نام سرور بانک اطلاعاتی را انتخاب کنید و برحسب تنظیمات دستگاه شما از لیست بانکهای اطلاعاتی نام بانکnorthwind را انتخاب کنید .صفحه ویزارد شما مشابه شکل زیر خواهد شد .در این صفحه تیک مقابل جمله save entity connection ….. باعث می شود که رشته اتصال به بانک اطلاعاتی با همان نام مشخص شده در زیر آن در فایلی تحت عنوان App.config ذخیره شود .اکنون به مرحله بعد می رویم مطابق شکل زیر
خوب اکنون در صفحه بالا جدولهای و 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 به شکل زیر دفت کنید
و در نهایت شما فایل module1.edmx را باز کنید که مطابق شکل زیر نمای جداول بانک اطلاعاتی رادر فضای ماژولار EDM نمایش می دهد ،
فعلا نگران نباشید در بخشهای بعدی با جزییات بیشتر EDM آشنا خواهیم شدادامه دارد...
مایکروسافت قبل از معرفی 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 ما در مورد طرح بانک اطلاعاتی بحث می کنیم .که باید تفاوت میان مدل داده و مدل شی را متوجه شویم ، شکل زیر یک مدل داده را نشان می دهد در حالی که شکل بعدی مدل شی گرا از بانک اطلاعاتی ما را نشان می دهد.
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- مدل فیزیکی
پایان بخش اول