Entity Framework مجموعهای از تکنولوژیها در ADO .NET است که توسعه نرمافزارهای بر مبنای داده را پشتیبانی میکند. معمارها و توسعهدهندگان برنامههای بر مبنای داده با دوهدف بسیار متفاوت دست و پنجه نرم میکنند. آنها باید موجودیتها (Entity)، رابطهها (Association) و منطق مشکلات کاری را که حل کردهاند، مدلسازی نمایند. آنها همچنین باید با موتور دادهای استفاده شده برای ذخیره و دریافت دادهها کار نمایند.
با استفاده از این تکنولوژی، توسعهدهندگان میتوانند در سطح بالاتری از تجرد در حین کار با دادهها دست یابند. آنها همچنین میتوانندنرمافزارهای بر مبنای داده را با میزان کمتر از کد نسبت به نرمافزارهای سنتی ساخته و نگهداری کنند.
حال به جزئیات بیشتری در این زمینه میپردازیم. پسوندهای موجود در 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 فقط خواندنی بدهد.