Entity Framework مجموعهای از تکنولوژیها درADO .NET است که توسعه نرمافزارهای بر مبنای داده را پشتیبانی میکند. معمارها و توسعهدهندگان برنامههای بر مبنای داده با دوهدف بسیار متفاوت دست و پنجه نرم میکنند. آنها باید موجودیتها(Entity)، رابطهها(Association) و منطق مشکلات کاری را که حل کردهاند، مدلسازی نمایند. آنها همچنین باید با موتور دادهای استفاده شده برای ذخیره و دریافت دادهها کار نمایند.
با استفاده از این تکنولوژی، توسعهدهندگان میتوانند در سطح بالاتری از تجرد در حین کار با دادهها دست یابند. آنها همچنین میتوانندنرمافزارهای بر مبنای داده را با میزان کمتر از کد نسبت به نرمافزارهای سنتی ساخته و نگهداری کنند.
Entity Framework یکORM است که توسط شرکتMicrosoft توسعه داده میشود. نسخه 1.0 اش مایوس کننده بود و در موارد بسیاری کمبود داشت. اما با توجه به سرمایه گذاری زیادی کهMicrosoft روی پروژه انجام داده بود، مشخص بود که قصد جدی در توسعه این ابزار داره. نسخه کنونی اون، 4 هست که باVisual Studio 2010 روی سیستم نصب میشه. با توجه به اهمیت این بحث برایMicrosoft، انتظار میره که توسعه این ابزار به طور فعالی ادامه پیدا کنه و امکانات کاملی به اون اضافه بشه.
رویکردهای طراحی رایج در هنگام ساخت یک نرمافزار یا سرویس این است که آن را به ۳بخش تقسیم کنند:
domail model : در این مدل موجودیتها و ارتباطات فی ماین را در سیستمهایی که مدل شدهاند تعریف میکنند.
logical model:این مدل در پایگاه دادههای رابطهای، موجودیتها و ارتباطات را در جداول با محدودیتهای کلید خارجی، نرمالسازی میکنند.
physical model:این مدل قابلیتهای یک موتور دادهای خاص را به وسیله مشخص کردن جزئیات ذخیرهسازی مانندpartitioning وindexing اداره میکند.
حال به جزئیات بیشتری در این زمینه میپردازیم. پسوندهای موجود درEntity Framework عبارتند از:
۱- csdl: این پسوند از مخفف شدنConceptual Schema Definition Language ساخته شده است. همانطور که از نام آن مشخص است این نوع فایل شامل مدل مفهومی(conceptual model) ما میباشد. این نوع فایل، پیاده سازی معادلEntity Data Model درLINQ میباشد.
۲- ssdl: این پسوند از مخفف شدنStore Schema Definition Language ساخته شده است. این نوع فایل مدل ذخیرهسازی را تعریف میکند. به این مدل، مدل منطقی(logical model) هم گفته میشود.
۳- msl: این پسوند از مخفف شدنMapping Specification Language ساخته شده است. این نوع فایل نگاشت بین دو مدل بالا را تعریف میکند.
حال که با این رویکرد عام طراحی آشنا شدید، لازم است که به موارد زیر اشاره کنم:
درEntity Framework بهdomain model ، مدل مفهومی یاconceptual model گفته میشود. همچنین معادلlogical model هم مدل ذخیرهسازی یاstorage model میباشد.
Entity Framework از اطلاعات موجود در مدل و فایلهای نگاشت، برای ترجمه کوئریهای آبجکتی در برابر موجودیتهای جایگزین شده در مدل مفهومی به کوئریهای سطح پایگاه داده استفاده میکند.
روشهای موجود برای کوئری زدن روی مدل مفهومی عبارتست از:
۱- LINQ to Entity: قابلیت استفاده ازLINQ به انواع موجودیت تعریف شده در مدل مفهومی را مهیا میکند.
۲- Entity SQL: یک نسخه از زبانSQL است که مستقل از ذخیرهسازی است و به صورت مستقیم با موجودیتهای موجود در مدل مفهومی و آنهایی که مفاهیمEDM را پشتیبانی میکنند کار میکند. این نوع از زبان هم با کوئریهای آبجکتی و هم کوئریهایی که توسط استفاده ازEntity Client Provider اجرا میشوند، قابل استفاده هستند.
۳- متدهای سازنده کوئری(Query Builder Methods) : این متدها، این امکان را به ما میدهند که کوئریهایEntity SQL را با استفاده از متدهای کوئری که درLINQ to SQL موجود است تولید کنند.
توجه به این نکته اهمیت دارد کهEntity Framework ازEntityClient data provider برای مدیریت اتصال به پایگاه داده، ترجمه کوئریهای موجودیت به کوئریهای مخصوص منبع داده و باز گرداندن یکdatareader کهEntity Framework برای ساختن موجودیتها در آبجکتها نیاز دارد، استفاده مینماید. زمانی که نیازی به تبدیل شدن به آبجکتها هم نیاز نباشد اینprovider میتواند به عنوان یکADO .NET data provider استفاده شود و خروجی را به عنوان یکdatareader فقط خواندنی بدهد.
مزایا:
سطح یادگیری ساده: کار باEF به نسبت بقیهORMها تقریبا ساده تر است.
پشتیبانی از دیتابیسهای مختلف در نسخه 4: لیست کامل رو در این آدرس ملاحظه کنید.
توسعه فعال: همونطور که اشاره شد، به نظر میادMicrosoft، قصد جدی ای در توسعه این ابزار داره. اضافه شدن امکانات زیاد به نسخه 4 نشان دهنده همین مطلب هست. امکانات زیادی به نسخه 4 اضافه شده مثل امکانCode First، Lazy Loading و … در نسخه 4 به اون اضافه شدن.
ابزار رسمیMicrosoft: از اونجا که این ابزار توسطMicrosoft ارائه میشه، میشه انتظار محبوب تر شدن اون رو در طی زمان داشت.
پشتیبانی کامل ازLinq.
نصب خودکار باVisual Studio.
معایب:
امکانات ناکافی: با وجود اضافه شدن امکانات زیادی به نسخه 4، اما این ابزار هنوز نسبت بهORMهای محبوب، دارای کم و کاستی هایی هست. ضمن اینکه اگر در دات نت 3.5 کد نویسی می کنید، به ناچار باید ازEF نسخه 1 استفاده کنید که بهتر است برای یک پروژه متوسط هم طرفش نرید.
تسلط پایین بر کد تولید شده: به خاطر استفاده از Designer، شما تسلط زیادی روی کدی که تولید میشه ندارید. البته با استفاده از کلاسهای partial، این مساله تا حدی بهبود داده شده است.