Entity Framework چیست؟
مجموعهای از تکنولوژیها در ADO .NET است که توسعه نرمافزارهای بر مبنای داده را پشتیبانی میکند. معمارها و توسعهدهندگان برنامههای بر مبنای داده با دوهدف بسیار متفاوت دست و پنجه نرم میکنند. آنها باید موجودیتها (Entity)، رابطهها (Association) و منطق مشکلات کاری را که حل کردهاند، مدلسازی نمایند. آنها همچنین باید با موتور دادهای استفاده شده برای ذخیره و دریافت دادهها کار نمایند.
Entity Framework یک ORM است که توسط شرکت Microsoft توسعه داده میشود. نسخه ۱.۰ اش مایوس کننده بود و در موارد بسیاری کمبود داشت. اما با توجه به سرمایه گذاری زیادی که Microsoft روی پروژه انجام داده بود، مشخص بود که قصد جدی در توسعه این ابزار داره. نسخه کنونی اون، ۴ هست که با Visual Studio 2010 روی سیستم نصب میشه. با توجه به اهمیت این بحث برای Microsoft، انتظار میره که توسعه این ابزار به طور فعالی ادامه پیدا کنه و امکانات کاملی به اون اضافه بشه.
با استفاده از این تکنولوژی، توسعهدهندگان میتوانند در سطح بالاتری از تجرد در حین کار با دادهها دست یابند. آنها همچنین میتوانندنرمافزارهای بر مبنای داده را با میزان کمتر از کد نسبت به نرمافزارهای سنتی ساخته و نگهداری کنند.
حال به جزئیات بیشتری در این زمینه میپردازیم. پسوندهای موجود در Entity Framework عبارتند از:
۱- csdl : این پسوند از مخفف شدن Conceptual Schema Definition Language ساخته شده است. همانطور که از نام آن مشخص است این نوع فایل شامل مدل مفهومی (conceptual model) ما میباشد. این نوع فایل، پیاده سازی معادل Entity Data Model در LINQ میباشد.
۲- ssdl : این پسوند از مخفف شدن Store Schema Definition Language ساخته شده است. این نوع فایل مدل ذخیرهسازی را تعریف میکند. به این مدل، مدل منطقی (logical model) هم گفته میشود.
۳- msl : این پسوند از مخفف شدن Mapping Specification Language ساخته شده است. این نوع فایل نگاشت بین دو مدل بالا را تعریف میکند.
رویکردهای طراحی رایج در هنگام ساخت یک نرمافزار یا سرویس این است که آن را به ۳ بخش تقسیم کنند:
- domail model : در این مدل موجودیتها و ارتباطات فی ماین را در سیستمهایی که مدل شدهاند تعریف میکنند.
- logical model : این مدل در پایگاه دادههای رابطهای، موجودیتها و ارتباطات را در جداول با محدودیتهای کلید خارجی، نرمالسازی میکنند.
- physical model : این مدل قابلیتهای یک موتور دادهای خاص را به وسیله مشخص کردن جزئیات ذخیرهسازی مانند partitioning و indexing اداره میکند.
حال که با این رویکرد عام طراحی آشنا شدید، لازم است که به موارد زیر اشاره کنم:
در 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ها تقریبا ساده تر است.
- پشتیبانی از دیتابیسهای مختلف در نسخه ۴: لیست کامل رو در این آدرس ملاحظه کنید.
- توسعه فعال: همونطور که اشاره شد، به نظر میاد Microsoft، قصد جدی ای در توسعه این ابزار داره. اضافه شدن امکانات زیاد به نسخه ۴ نشان دهنده همین مطلب هست. امکانات زیادی به نسخه ۴ اضافه شده مثل امکان Code First، Lazy Loading و … در نسخه ۴ به اون اضافه شدن.
- ابزار رسمی Microsoft: از اونجا که این ابزار توسط Microsoft ارائه میشه، میشه انتظار محبوب تر شدن اون رو در طی زمان داشت.
- پشتیبانی کامل از Linq.
- نصب خودکار با Visual Studio.
معایب:
- امکانات ناکافی: با وجود اضافه شدن امکانات زیادی به نسخه ۴، اما این ابزار هنوز نسبت به ORMهای محبوب، دارای کم و کاستی هایی هست. ضمن اینکه ا
گر در دات نت ۳.۵ کد نویسی می کنید، به ناچار باید از EF نسخه ۱ استفاده کنید که بهتر است برای یک پروژه متوسط هم طرفش نرید.
- تسلط پایین بر کد تولید شده: به خاطر استفاده از Designer، شما تسلط زیادی روی کدی که تولید میشه ندارید. البته با استفاده از کلاسهای partial، این مساله تا حدی بهبود داده شده است.
Entity Framework در مقابل NHibernate:
Operation Number of operations | |||||
Entity Framework | 98 | 1500 | 9,19 | 37,37 | Store |
Entity Framework | 4,18 | 10,13 | 0,54 | 1,01 | Read over relations |
NHibernate with smaller amount of objects |
230 | 246 | 25,22 | 3,06 | Read by ID |
Both | 72 | 77 | 7,34 | 6,61 | Update |
NHibernate |
58 | 58 | 16,76 | 3,35 | Delete |
منبع: itc.itmavara.com