آموزش entity framework 4
آموزش entity framework 4
در این پست کتابی رو آماده کردم که واقعا کتاب فوق العاده ای در زمینه Entity Framework 4.0 هست که در قالب ۲۶۴ صفحه نگارش شده است در کتاب آموزش گام به گام Entity Framework 4.0 اصول استفاده از روش Database First در Entity Framework را به منظور نمایش داده ها در یک برنامه ASP.Net Web Forms خواهید آموخت.
Entity Framework چیست؟
مجموعهای از تکنولوژیها در .NET است که توسعه نرمافزارهای بر مبنای داده بخصوص پایگاه داده را پشتیبانی میکند. در استفاده از .NET معمولا از سه روش وجود دارد:
ADO.NET
Linq 2 SQL یا به اختصار L2S
Entity Framework یا بهاختصارEF
قبل از این که بخواهیم باEntity Framework آشنا شویم، بهتر است مفهومORMرا بدانیم.ORMیا Object Relational Mapping ابزاری است که به وسیله آن می توان جداول پایگاه داده را پردازش کرد و آنها را به فرمت شیءنگاشت کرد که در کدنویسی خواناتر باشند. در کدنویسی به جای این که به صورت مستقیم با جداول پایگاه داده کار کنیم بر روی اشیاء کار می کنیم. به این اشیاء موجودیت یا Entity گفته می شود.
Entity Framework یک ORM است که توسط شرکت Microsoft توسعه داده میشود. نسخه ۱٫۰ آن مایوس کننده بود و در موارد بسیاری کمبود داشت. اما با توجه به سرمایه گذاری زیادی که Microsoft روی پروژه انجام داده بود، مشخص بود که قصد جدی در توسعه این ابزار دارد. نسخه کنونی آن، ۴ هست که باStudio 2008Visual روی سیستم نصب میشود. با توجه به اهمیت این بحث برای Microsoft، انتظار میرود که توسعه این ابزار به طور فعالی ادامه پیدا کند و امکانات کاملی به آن اضافه شود.
ADO.NET Entity Framework به گونه ای طراحی شده است تا توسعه دهندگان را قادر سازد در مقابل مدل های مرسوم مفهومی (conceptual)، از یک مدل جدید با امکان دسترسی و برنامه نویسی مستقیم بر اساس ساختار یک پایگاه داده رابطه ای استفاده نمایند. هدف از تولید این مدل، کاهش چشمگیر میزان کدنویسی، سهولت گسترش، ترمیم، بهبود و نگهداری برنامه ها بوده است.
چرا از Entity Framework استفاده می کنیم؟
· دسترسی به داده ها را ساده می سازد و به ما اجازه می دهد تا مدل مفهومی مورد نیاز برای کسب و کار را ایجاد کنیم.
· EF اجازهمیدهدتاشماروابطچندبهچند (n: n) را بدون join ها متعدد مدیریت نمایید.
· جهت کاهش پیچیدگی کد، جداول مرتبط را در یک Entity مدل می کند.
· پشتیبانی غنی و خوب از ارث بری ها برای جدول به ازای سلسله مراتب، زیرکلاس (subclass) و تایپ های به هم چسبیده (concrete type).
· چون دارای مکانیسم بسیار قوی Query گیری از Entity هاست. کسانی که مایل با استفاده از LINQ نیستند، میتواننداز Entity Client provider همراه باEntitySQLاستفاده نمایند.
· مستقل از نوع پایگاه داده می باشد و بر اساس استاندارد ADO.NET Providers. کار می کند.
روش های استفاده از EF :
حال که بررسی کردیم که چرا باید از EF استفاده کنیم، به روش های استفاده از این روش خواهیم پرداخت.
۱) روش Database First :
یعنی وظیفه توسعه دهنده نرم افزار این است که پایگاه داده را ایجاد کند. سپس با دادناین پایگاه داده به Entity Framework، یک فایل مدل با پسوند edmx تحویل بگیرد. در این فایل که یک فایل xmlاست، اطلاعات مربوط به موجودیتها، خصوصیات هر موجودیت و نوع داده هر خصوصیت قرار گرفته است. (به این قسمت از فایل مدل مدل مفهومی گفته می شود). در فایل مدل علاوه بر مدل مفهومی، مدل فیزیکی هم قرار دارد. مدل فیزیکی اطلاعات مربوط به جداول پایگاه داده و فیلدهای هر جدول و نیز نوع داده هر فیلد قرار گرفته است. فایل مدل شامل قسمت دیگری است که بیان می کند جداول پایگاه داده به چه موجودیتهایی نگاشت شده اند.
۲) روش Model First :
در این روش وظیفه توسعه دهنده نرم افزار، ایجاد مدل می باشد. یعنی او خود فایلedmxرا می سازد. بعد از این کار می تواند ازEFبخواهد تا پایگاه داده مربوط به این مدل را ایجاد کند. برای این کار او ازیک ابزار ویژوال به اسم Entity Data Model Designerاستفاده می کند. این ابزار ویژوال بسیار قدرتمند می باشدو امکاناتی از قبیل ساختن موجودیتها، تعیین ارتباط بین موجودیتها، ایجاد کلید برای هر موجودیت، کاردینالیتی رابطه ها و غیره را در اختیار توسعه دهنده قرار می دهد.
در روش های الف و ب ، در Code Behindمدل کلاسهایی مربوط به هر موجودیت و نیز شیContextوجود دارد.
۳) روش Code First :
این روش خود شامل دو قسمت می باشد:
اول؛ این است که توسعه دهنده کلاس های مربوط به هر موجودیت را ایجاد می کند. او این کار را با برنامه نویسی انجام می دهد. یعنی باید تک تک کلاسها، به همراه خصوصیات هر کلاس و البته خصوصیاتNavigationرا بابرنامه نویسی ایجاد کند. خصوصیاتNavigationآن دسته از خصوصیاتی هستند که ارتباط آن کلاس را با کلاس های دیگر مشخص می کنند. در این روش هیچ فایل مدلی وجود نخواهد داشت.
دوم؛ این است که مثل روشDatabase Firstابتدا توسعه دهنده یک پایگاه داده ایجاد می کند، سپس مدل را ایجاد می کند، سپس از یک افزونه می خواهد که موجودیتها را به همراه Contextایجاد کند و اینها را از مدل جدا کند. اگر موجودیتها به این طریق ایجاد شوند به آنها POCOگفته می شود. فرق آن با روشDatabase Firstدر همین نکته است. در اینجا فایل مدل (فایلedmx ) فقط اطلاعات مربوط به موجودیتها را نگهداری می کند و در Code Behindآن هیچ کدی نوشته نمی شود.
مزایا :
۱- سطح یادگیری ساده: کار با EF به نسبت بقیه ORMها تقریبا ساده تراست.
۲- پشتیبانی از پایگاه داده های مختلف در نسخه ۴٫
۳- توسعه فعال: همانطور که اشاره شد، به نظر می رسدMicrosoft، قصد جدی در توسعه این قابلیت دارد. اضافه شدن امکانات زیاد به نسخه ۴ نشاندهنده همین مطلب هست. مثل امکان Code First، Lazy Loading و …که در نسخه ۴ به EF اضافه شده اند.
۴- توسعه دهندگان قادرند تا با ساختار شیء گرایانه سازگار با انواع سیستم های مدیریت داده کار کنند.
۵- پشتیبانی کامل از Linq.
۶- نصب خودکار باStudioVisual.
۷- مرتبط شدن چندین مدل مفهومی به یک ساختارپایگاه داده.
۸- برنامه های کاربردی قادر خواهند بود تا در مدل مفهومی خود (conceptual model) محوریت بیشتری به خود برنامه ببخشند به گونه ای که شیء گرایی، ارث بری، گونه ها (Type) های پیچیده تر و روابط بین جداول و اشیاء بهتر پیاده سازی شوند.
۹-برنامه نویس ها از کدنویسی زیادی پیچیده رها می شوند.
۱۰- بدون کوچک ترین تغییر کد برنامه خواهیم توانست مدل ارتباط بین ساختار پایگاه داده و مدل مفهومی را تغییر دهیم.
معایب:
۱- امکانات ناکافی: با وجود اضافه شدن امکانات زیادی به نسخه ۴، اما این ابزار هنوز نسبت به ORMهای محبوب، دارای کم و کاستی هایی هست.
۲- تسلط پایین بر کد تولید شده: به خاطر استفاده از Designer، روی کدی که تولید میشود، نمی توان تسلط زیادی داشت که البته با استفاده از کلاسهای partial، این مساله تا حدی بهبود داده شد.
انتخاب بین L2SوEF:
حال که با روش EF آشنا شدیم، در پایان بررسی می کنیم که چه زمانی از Linq و چه زمانی از EF استفاده کنیم.
الف) Linq 2 SQL
زمانی که:
۱- از یک ORMاستفاده کنیم و پایگاه داده ما در یک رابطه ۱ به ۱ با مدل اشیاء قرار دارد.
۲- از یک ORMکه ساختا رسلسله مراتبی ای را که دریک جدول ذخیره شده است، ارث بری کرده باشد.
۳-استفاده از کلاس هایی که خودمان نوشتیم، درکنارکلاسهای تولید شده توسط سیستم یا ارثبری از کلاسهای پایه یا پیاده سازی رابط ها درکلاسها.
۴- استفاده از LINQبه عنوان ابزار Queryنویسی
۵- استفاده از یک ORMبا حفظ کارآیی و امکان بهبود آن از طریقStored Procedureها وQueryهای کامپایل شده.
ب) Entity Framework
زمانی که :
۱- بخواهیم برنامه ما به پایگاه داده های دیگری به جز Microsoft SQL Serverنیز دسترسی پیدا کند.
۲- بخواهیم domain modelsبرای برنامه مان تعریف کنیم و از آن به عنوان لایه persistenceاستفاده نماییم.
۳- از یک راهکار ORMی استفاده کنیم که ممکن است کلاسهایمان رابط های ۱:۱ با پایگاه داده داشته باشد یا ممکن است ساختاری بسیار متفاوت و پیچیده در ارتباط با پایگاه داده دارا باشد.
۴- میخواهیم از یک ORMاستفاده کنیم که ساختارهای سلسله مراتبی در آن، معادل های پایگاه داده ای متفاوتی داشته باشد. مانند وقتی که جدولی جهت نگهداری سلسله مراتب، جداولی برای هر یک ازکلاسها وجدولی جهت نگهداری گونه ای (Type) خاص داریم.
۵- وقتی میخواهیم از LINQجهت نوشتن Queryها استفاده کنیم درحالیکه Queryدرپایگاه داده به شیوه خاص و درسلطه سازنده آن عمل میکند.
۶- استفاده از کلاسهایی که خودمان نوشتیم، درکنارکلاسهای تولیدشده توسط سیستم یا ارثبری ازکلاسهای پایه یا پیادهسازی رابطها درکلاسها.
۷- استفاده از یک ORMبا حفظ کارآیی و امکان بهبود آن از طریقStored Procedureها و Queryهای کامپایل شده.