Entity Framework چیست؟

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

در این مقاله قصد دارم به تو نشان دهم که چگونه می توانی با استفاده از یک تکنولوژی به نام Entity Framework با دیتابیس ارتباط برقرار کنی.

واضح است که در عکس زیر روش های مختلف ثبت اطلاعات نشان داده شده است.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

در تمام روش ها انسان شخصی است که اطلاعات را ثبت می کند.

اما در روش مدرن ثبت اطلاعات، اطلاعات به شکل پیچیده تری از فرم های نرم افزاری در بانک اطلاعاتی ذخیره می شوند.

مانند شکل زیر:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

در این شکل ثبت اطلاعات وارد شده در یک فرم در یک بانک اطلاعاتی نمایش داده شده می شود.

اما  آیا تا به حال فکر کرده ای که ارتباط بین فرم های نرم افزاری و بانک اطلاعاتی چگونه برقرار می شود ؟

یا این سوال برایت پیش آمده که چطور اطلاعات از فرم به سمت بانک اطلاعاتی و یا از بانک اطلاعاتی به سمت فرم می آید ؟

این کار توسط چیزی به نام ORM انجام می شود.

ORM چیست؟

ORM یا Object Relational Mapper در واقع  پلی برای ارتباط بین دو زبان ناسازگار مانند C# و SQL است.

در واقع ORM  یک تکنیک برنامه نویسی با استفاده از تکنولوژی Object-Oriented است، که برای تبدیل داده های بین دو زبان برنامه نویسی ناسازگار استفاده می شود.

ORM در واقع مسئول ساخت ارتباطات بین نرم افزار تو و بانک اطلاعاتی ات است.

ORM همچنین اجرای دستورات، گرفتن نتیجه پرس و جو ها و  را نیز برعهده دارد.

برای ارتباط نرم افزاری که با استفاده از زبان برنامه نویسی سی شارپ نوشته ای و قرار است داده ها و اطلاعات را در بانک اطلاعاتی SQL ذخیره کنی از یک ORM با عنوان Entity Framework استفاده می شود.

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

برای اینکه برنامه نویسان بتوانند کارهای اضافه ای برای ارتباط با بانک اطلاعاتی انجام ندهند می توانند از Entity Framework استفاده کنند. بنابراین به جرات می توان گفت Entity Framework موجب افزایش بهروه وری برنامه نویس شود.

چگونه از Entity Framework استفاده کنم ؟

فرقی ندارد از مدل DatabaseFirst یا CodeFirst برای ساخت نرم افزارت استفاده کرده باشی، در هر صورت تفاوتی نخواهد داشت که چطور از Entity FrameWork استفاده کنی.

استفاده از Entity Framework در روش CodeFirst

خبر خوب این است که در روش کدفرست لازم نیست کد ها را به بانک اطلاعاتی تبدیل کنی.

بلکه در این روش کلاس هایی که می نویسی به جداول بانک اطلاعاتی تبدیل می شوند.

اکنون هدف این است که کلاس عینانا  به جدول در بانک اطلاعاتی تبدیل شود.

برای این کار باید مراحل زیر را انجام دهی:

۱- اضافه کردن EF

۲- اتصال اسکیوال سرور به نرم افزارمت(با استفاده از رشته اتصال).

۳- به جای لیست از DbSet استفاده کنی.

۴- بانک اطلاعاتی شی گرا بسازی.

۵- از بانک اطلاعاتی شی گرا نمونه گیری کنی و به جدول مورد نظر، ردیف اضافه کنی. به عبارتی در آن اطلاعات قرار می دهیم.

اضافه کردن Entity Framework به پروژه

برای اضافه کردن Entity Framework  مراحل زیر را طی کن

در وبسایت  www.nuget.org در قسمت search عبارت EF را جست و جو کن :

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

تا نتیجه زیر نمایش داده شود :

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

بر روی گزینه Entity Framework کلیک کن تا نتیجه زیر نمایش داده شود:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

سپس در ویژوال استدیو در قسمت package manager console که در منو Tools قرار دارد را انتخاب کن:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

کدی که در شکل زیر نمایش داده شده است را از سایت www.nuget.org کپی کن.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

آن را بعد از PM> قرار بده و enter را بزن تا پیام زیر نمایش داده شود :

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

این پیام به این معنا است که Entity Framework به درستی نصب شده است.

سپس در پنجره solution explorer در قسمت references باید موارد EntityFramework و EntityFramework.SqlServer  مانند شکل زیر اضافه شده باشند :

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

در این مرحله اضافه کردن Entity Framework به پایان رسانده ای .

به یاد داشته باش که وظیفه Entity Framework این است که کلاس تو را به جدولی در بانک تبدیل کند .

اکنون به سراغ تنظیم اتصال به بانک اطلاعاتی می رویم.

تنظیم اتصال به بانک اطلاعاتی

اتصال بانک اطلاعاتی به نرم افزار با استفاده از Connection String (رشته اتصال) که در آن مسیر بانک اطلاعاتی مشخص می شود، انجام می شود.

رشته اتصال در فایلی به نام App.Config بعد از startup قرار می گیرد.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

و Connection String به شکل زیر خواهد بود :

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

از طریق رشته اتصال ارتباط با sql server برقرار می شود . به عبارت دیگر رشته اتصال “آدرس بانک اطلاعاتی” است.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

همانطور که در تصویر بالا می بینی، name نام رشته اتصال، Data Source نام سرور Sql است که بانک در آن ایجاد می شود و catalog نام بانک اطلاعاتی شما را تعیین می کند.

مراحل تنظیم connection string در اینجا به پایان می رسد.

چطور جدول های بانک اطلاعاتی را بسازم ؟

همانطور که در ایتدا گفته شد در روش CodeFirst یک کلاس به یک جدول در بانک اطلاعاتی تبدیل می شود.

برای این کار یک کلاس به نام DB باید داشته باشی تا هر کلاسی را که می خواهی به جدول تبدیل کنی را در آن به صورت پراپرتی از نوع DbSet تعریف کنی.

فرض کن بخواهی اطلاعات یک انسان را ذخیره کنی بنابراین یک کلاس با نام human تعریف می کنم با پراپرتی های دلخواه.

این human  کلاسی است که نماینده موجودیتی در دنیای واقعی است.

و همچنین نماینده جدولی در بانک خواهد بود.

در این کلاس ویژگی های یک انسان وجود دارد که در واقع  فیلد های جدول بانک اطلاعاتی را می سازد :

public class human
{
public int id { set; get; }
public string name { set; get; }
public string family { set; get; }
public byte age { set; get; }
}

 نکته:

حتما باید پراپرتی id را قرار دهی چون این پراپرتی در هنگام تبدیل این کلاس به جدول در بانک به عنوان کلید شناخته خواهد شد .

در صورتی که این پراپرتی را فراموش کنی با خطای زیر برخواهی خورد:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

اکنون برای تبدیل کلاس human به جدول متناظر با آن در دیتابیس لازم است تا از کلاس human  یک پراپرتی DbSet ، در کلاس DB که در بالا گفته شد قرار دهی.

باید برای هر موجودیت یا کلاسی که در پروژه داری یک Dataset بنویسی.
کلاسی به نام db بساز و کد زیر را در آن قرار بده:

class db
{
public DbSet humans { set; get; }
}

نکته:

در بالای کلاس db حتما برای استفاده از امکانات Entity Framework باید عبارت

using System.Data.Entity;

را به قسمت using های برنامه اضافه کنیم .

اکنون برای اینکه کلاس db بتواند نقش نماینده ای برای بانک اطلاعاتی را ایفا کند باید از DbContext ارث بری کند.

همچنین باید راهی باشد تا این کلاس بتواند بانک اطلاعاتی را بشناسد که از طریق نام رشته اتصال این اتفاق رخ می دهد .

بنابراین کلاسی که در بالا نوشتیم را به شکل زیر تکمیل می کنیم:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

 

اکنون برای درج اطلاعات در بانک کافی است از کلاسی که به عنوان نماینده بانک اطلاعاتی ساختی نمونه گیری کنی.

سپس با استفاده از متد ()Add اطلاعات را در آن درج کنی و با استفاده از متد ()SaveChanges آن را ذخیره کنی.

به شکل زیر :

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

 

به طور کلی در این قسمت برقراری ارتباط با بانک اطلاعاتی با استفاده از Entity Framework در روش کدفرست را در ۴ مرحله گفتیم:

۱- نصب Entity Framework

۲- تنظیم رشته اتصال جهت برقراری ارتباط

۳- ساخت کلاس متناظر با موجودیتی که می خواهی در مورد آن اطلاعات ذخیره کنی

۴- ساخت کلاس متناظر با دیتابیس و جدول درون آن

۵- دریافت اطلاعات و ثبت در بانک اطلاعاتی

 

این ۵ قدم را در ویدئو زیر هم به تصویر کشیده ام تا بهتر بتوانی آن را درک کنی.

 

 

استفاده از Entity Framework در روش DatabaseFirst

 

تفاوت این روش با روش قبلی در این است که بانک اطلاعاتی و جداول آن از  پیش ساخته شده اند و کارها بر اساس مدلی که از قرار است در ادامه ببینی انجام می شود.

  ایجاد اولین مدل از روی پایگاه داده ‏ها :

در پنجره ‏ی Solution Explorer راست کلیک کرده و گزینه‏ ی Add New Item را کلیک کن.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

از پنجره‏ ی ظاهر شده گزینه‏ ی ADO.NET Entity Data Model را انتخاب کن.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

حال پنجره‏ ی Entity Data Model Wizard را مشاهده خواهی کرد.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

گزینه‏ ی Generate from Database را جهت مدل سازی از روی پایگاه داده‏ های موجود، انتخاب کن و کلید Next را کلیک کن.

در این مرحله می‏توانی بانک اطلاعاتی مورد نظر خود را انتخاب کنی:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

در صورتی که کلید Next را فشار داده و همچنین یک فایل پایگاه داده ‏ انتخاب کرده باشی، پیغام زیر جهت آنکه “فایل بانک در مسیر پروژه کپی شود یا خیر؟ ” نمایش داده خواهد شد. که ترجیحاً این کار تایید نشود بهتر است.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

در این قسمت در مورد نسخه Entity Framework ای که می خواهی استفاده کنی از تو خواهد پرسید:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

بعد از تایید یا عدم تایید پیغام فوق پنجره‏ ی زیر جهت انتخاب جداول، روال‏های ذخیره شده و ویوها نمایش داده خواهد شد.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

در این پنجره یک گزینه‏ ی انتخابی با عنوان   singularize generated object names” or “Pluralize وجود دارد که با انتخاب این گزینه نوع مدلی که از هر جدول (Entity Type) ایجاد می‏شود.

نامی منفرد و Entity‏ ای که در پرس و جوها و ObjectContext برای ایجاد متدهای CRUD خودکار به کار گرفته می‏شوند، نام جمعی به خود می‏گیرند.

به عنوان مثال با انتخاب جدول Personel ، نوع این جدول در کلاسی با عنوان Personel (نام انفرادی) و Entity آن، نامی با عنوان Personels (نام جمعی) به خود می‏گیرد.

در قسمت پایین این گزینه نام محیط مدل سازی و ObjectContext  مشخص می‏شود.

در نهایت در solution explorer نگاه کنید یک مدل با پسوند edmx. اضافه می شود.  مانند شکل زیر:

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

و معادل جدول Person در مدل یک کلاس به شکل زیر خواهد بود.

Entity Framework چیست؟ انتیتی فریمورک کدفرست دیتابیس فرست codefirst databasefirst

خب ممکن سوالی که برایت پیش می آید این باشد که پس Entity Framework اش کجا است ؟

جواب : در روش دیتابیس فرست Entity Framework به همراه همان مدلی که می سازید، نصب می شود.

 

12 پاسخ
  1. Programmer
    Programmer گفته:

    ممنون بابت مقاله خوبتون ، من مقاله های زیادی در مورد Entity خوندم ، منتهی به همین قشنگی توضیح داده نشدن ، خیلی عالی ادامه بده ، منتظر مقاله های بعدی هستیم ….

    پاسخ
  2. سهیلا
    سهیلا گفته:

    سلام، خیلی عالی توضیح میدین، من قبلا توسط مقاله ای ک از شما خوندم با شما اشنا شدم، من خودم عاش برنامه نویسیم ولی تا حالا ب طور جدی و حرفه ای برنامه نویسی نکردم، نمیدونم ازکجا و چجوری شروع کنم میشه بهم کمک کنین. ی سوال دیگه اینکه بین ادامه تحصیل و کار کدومو ترجیح میدین؟

    پاسخ

تعقیب

  1. […] Access هم برای ارتباط با بانک اطلاعاتی طبق آنچه در مقاله Entity Framework گفته شد، باید از ;using System.Data.Entity استفاده […]

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

پاسخی بگذارید

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