زئوس شایسته ی دریافت گواهینامه ی پنجمین جشنواره حامیان حقوق مصرف کنندگان
زئوس شایسته ی دریافت گواهینامه ی پنجمین جشنواره حامیان حقوق مصرف کنندگان
می 11, 2016
6قانون مهم سئو
6 قانون مهم سئو در سال 2016 
می 14, 2016

entity-framework

نویسنده: پرهام هادیخانی

شنبه, 25 اردیبهشت 95ساعت 9:25


Entity Framework یک ORM است که توسط شرکت Microsoft توسعه داده میشود. نسخه 1.0 آن مایوس کننده بود و در موارد بسیاری کمبود داشت. اما با توجه به سرمایه گذاری زیادی که Microsoft روی پروژه انجام داده بود، مشخص بود که قصد جدی در توسعه این ابزار دارد. نسخه کنونی آن، 6 هست که با 2015 Visual Studio  روی سیستم نصب میشود. با توجه به اهمیت این بحث برای Microsoft، انتظار میرود که توسعه این ابزار به طور فعالی ادامه پیدا کند و امکانات کاملی به آن اضافه شود.

نکته : .ORM یا Object Relational Mapping ابزاری است که به وسیله آن می توان جداول پایگاه داده را پردازش کرد و آنها را به فرمت شیءنگاشت کرد که در کدنویسی خواناتر باشند. در کدنویسی به جای این که به صورت مستقیم با جداول پایگاه داده کار کنیم بر روی اشیاء کار می کنیم. به این اشیاءموجودیت یا Entity گفته می شود.

ADO.NET Entity Framework به گونه ای طراحی شده است تا توسعه دهندگان را قادر سازد در مقابل مدل های مرسوم مفهومی (conceptual)، از یک مدل جدید با امکان دسترسی و برنامه نویسی مستقیم بر اساس ساختار یک پایگاه داده رابطه ای استفاده نمایند. هدف از تولید این مدل، کاهش چشمگیر میزان کدنویسی، سهولت گسترش، ترمیم، بهبود و نگهداری برنامه ها بوده است.

چرا از Entity Framework استفاده می کنیم؟

·        دسترسی به داده ها را ساده می سازد و به ما اجازه می دهد تا مدل مفهومی مورد نیاز برای کسب و کار را ایجاد کنیم.

·        Entity Framework اجازه میدهد تا شما روابط چندبه چند (n: n) را بدون join ها متعدد مدیریت نمایید.

·         جهت کاهش پیچیدگی کد، جداول مرتبط را در یک Entity مدل می کند.

·        پشتیبانی غنی و خوب از ارث بری ها برای جدول به ازای سلسله مراتب، زیرکلاس (subclass) و تایپ های به هم چسبیده (concrete type).

·        چون دارای مکانیسم بسیار قوی Query گیری از Entity هاست. کسانی که مایل با استفاده از LINQ نیستند، میتواننداز Entity Client provider  همراه باEntitySQLاستفاده نمایند.

·        مستقل از نوع پایگاه داده می باشد و بر اساس استاندارد ADO.NET Providers. کار می کند.

روش های Entity Framework

1) روش Database First  :

یعنی وظیفه توسعه دهنده نرم افزار این است که پایگاه داده را ایجاد کند. سپس با دادناین پایگاه داده به Entity Framework،  یک فایل مدل با پسوند edmx  تحویل بگیرد. در این فایل که یک فایل xmlاست، اطلاعات مربوط به موجودیتها، خصوصیات هر موجودیت و نوع داده هر خصوصیت قرار گرفته است. (به این قسمت از فایل مدل مدل مفهومی گفته می شود). در فایل مدل علاوه بر مدل مفهومی، مدل فیزیکی هم قرار دارد. مدل فیزیکی اطلاعات مربوط به جداول پایگاه داده و فیلدهای هر جدول و نیز نوع داده هر فیلد قرار گرفته است. فایل مدل شامل قسمت دیگری است که بیان می کند جداول پایگاه داده به چه موجودیتهایی نگاشت شده اند.

2) روش Model First :

در این روش وظیفه توسعه دهنده نرم افزار، ایجاد مدل می باشد. یعنی او خود فایلedmxرا می سازد. بعد از این کار می تواند ازEFبخواهد تا پایگاه داده مربوط به این مدل را ایجاد کند. برای این کار او ازیک ابزار ویژوال به اسم Entity Data Model Designerاستفاده می کند. این ابزار ویژوال بسیار قدرتمند می باشدو امکاناتی از قبیل ساختن موجودیتها، تعیین ارتباط بین موجودیتها، ایجاد کلید برای هر موجودیت، کاردینالیتی رابطه ها و غیره را در اختیار توسعه دهنده قرار می دهد.

در روش های الف و ب ، در Code Behindمدل کلاسهایی مربوط به هر موجودیت و نیز شی Context وجود دارد.

3) روش Code First :

این روش خود شامل دو قسمت می باشد:

اول؛ این است که توسعه دهنده کلاس های مربوط به هر موجودیت را ایجاد می کند. او این کار را با برنامه نویسی انجام می دهد. یعنی باید تک تک کلاسها، به همراه خصوصیات هر کلاس و البته خصوصیاتNavigationرا بابرنامه نویسی ایجاد کند. خصوصیاتNavigationآن دسته از خصوصیاتی هستند که ارتباط آن کلاس را با کلاس های دیگر مشخص می کنند. در این روش هیچ فایل مدلی وجود نخواهد داشت.

دوم؛ این است که مثل روشDatabase Firstابتدا توسعه دهنده یک پایگاه داده ایجاد می کند، سپس مدل را ایجاد می کند، سپس از یک افزونه می خواهد که موجودیتها را به همراه Contextایجاد کند و اینها را از مدل جدا کند. اگر موجودیتها به این طریق ایجاد شوند به آنها POCOگفته می شود. فرق آن با روشDatabase Firstدر همین نکته است. در اینجا فایل مدل (فایلedmx ) فقط اطلاعات مربوط به موجودیتها را نگهداری می کند و در Code Behindآن هیچ کدی نوشته نمی شود.

مزایا
1- سطح یادگیری ساده: کار با EF به نسبت بقیه ORMها تقریبا ساده تراست.
2- پشتیبانی از پایگاه داده های مختلف در نسخه 4.
3- توسعه فعال: همانطور که اشاره شد، به نظر می رسدMicrosoft، قصد جدی در توسعه این قابلیت دارد. اضافه شدن امکانات زیاد به نسخه 4 نشاندهنده همین مطلب هست. مثل امکان Code First، Lazy Loading و …که در نسخه 4 به EF اضافه شده اند.
4-  توسعه دهندگان قادرند تا با ساختار شیء گرایانه سازگار با انواع سیستم های مدیریت داده کار کنند.
5- پشتیبانی کامل از Linq.
7-  مرتبط شدن چندین مدل مفهومی به یک ساختارپایگاه داده.

8-  برنامه های کاربردی قادر خواهند بود تا در مدل مفهومی خود (conceptual model) محوریت بیشتری به خود برنامه ببخشند به گونه ای که شیء گرایی، ارث بری، گونه ها (Type) های پیچیده تر و روابط بین جداول و اشیاء بهتر پیاده سازی شوند.
9-برنامه نویس ها از کدنویسی زیادی پیچیده رها می شوند.
10-  بدون کوچک ترین تغییر کد برنامه خواهیم توانست مدل ارتباط بین ساختار پایگاه داده و مدل مفهومی را تغییر دهیم.

انتخاب بین Linq To SQL و EF:

حال که با روش EF آشنا شدیم، در پایان بررسی می کنیم که چه زمانی از Linq و چه زمانی از EF استفاده کنیم.

الف) Linq to SQL

زمانی که:

1- از یک  ORMاستفاده کنیم و پایگاه داده ما در یک رابطه 1 به 1 با مدل اشیاء قرار دارد.

2- از یک  ORMکه ساختا رسلسله مراتبی ای را که دریک جدول ذخیره شده است، ارث بری کرده باشد.

3-استفاده از کلاس هایی که خودمان نوشتیم، درکنارکلاسهای تولید شده توسط سیستم یا ارثبری از کلاسهای پایه یا پیاده سازی رابط ها درکلاسها.

4- استفاده از  LINQبه عنوان ابزار  Queryنویسی

5- استفاده از یک  ORMبا حفظ کارآیی و امکان بهبود آن از طریقStored Procedureها وQueryهای کامپایل شده.

ب) Entity Framework

زمانی که :

1- بخواهیم برنامه ما به پایگاه داده های دیگری به جز  Microsoft SQL Serverنیز دسترسی پیدا کند.

2- بخواهیم  domain modelsبرای برنامه مان تعریف کنیم و از آن به عنوان لایه  persistenceاستفاده نماییم.

3- از یک راهکار  ORMی استفاده کنیم که ممکن است کلاسهایمان رابط های 1:1 با پایگاه داده داشته باشد یا ممکن است ساختاری بسیار متفاوت و پیچیده در ارتباط با پایگاه داده دارا باشد.

4- میخواهیم از یک  ORMاستفاده کنیم که ساختارهای سلسله مراتبی در آن، معادل های پایگاه داده ای متفاوتی داشته باشد. مانند وقتی که جدولی جهت نگهداری سلسله مراتب، جداولی برای هر یک ازکلاسها وجدولی جهت نگهداری گونه ای (Type) خاص داریم.

5- وقتی میخواهیم از  LINQجهت نوشتن Queryها استفاده کنیم درحالیکه  Queryدرپایگاه داده به شیوه خاص و درسلطه سازنده آن عمل میکند.

6- استفاده از کلاسهایی که خودمان نوشتیم، درکنارکلاسهای تولیدشده توسط سیستم یا ارثبری ازکلاسهای پایه یا پیادهسازی رابطها درکلاسها.

7- استفاده از یک  ORMبا حفظ کارآیی و امکان بهبود آن از طریقStored Procedureها و Queryهای کامپایل شده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *