Entity Framework چیست؟ ارتباط با دیتابیس با استفاده از انتیتی فریمورک
در این مقاله قصد دارم به تو نشان دهم که چگونه می توانی با استفاده از یک تکنولوژی به نام Entity Framework با دیتابیس ارتباط برقرار کنی.
واضح است که در عکس زیر روش های مختلف ثبت اطلاعات نشان داده شده است.
در تمام روش ها انسان شخصی است که اطلاعات را ثبت می کند.
اما در روش مدرن ثبت اطلاعات، اطلاعات به شکل پیچیده تری از فرم های نرم افزاری در بانک اطلاعاتی ذخیره می شوند.
مانند شکل زیر:
در این شکل ثبت اطلاعات وارد شده در یک فرم در یک بانک اطلاعاتی نمایش داده شده می شود.
اما آیا تا به حال فکر کرده ای که ارتباط بین فرم های نرم افزاری و بانک اطلاعاتی چگونه برقرار می شود ؟
یا این سوال برایت پیش آمده که چطور اطلاعات از فرم به سمت بانک اطلاعاتی و یا از بانک اطلاعاتی به سمت فرم می آید ؟
این کار توسط چیزی به نام 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 کلیک کن تا نتیجه زیر نمایش داده شود:
سپس در ویژوال استدیو در قسمت package manager console که در منو Tools قرار دارد را انتخاب کن:
کدی که در شکل زیر نمایش داده شده است را از سایت www.nuget.org کپی کن.
آن را بعد از PM> قرار بده و enter را بزن تا پیام زیر نمایش داده شود :
این پیام به این معنا است که Entity Framework به درستی نصب شده است.
سپس در پنجره solution explorer در قسمت references باید موارد EntityFramework و EntityFramework.SqlServer مانند شکل زیر اضافه شده باشند :
در این مرحله اضافه کردن Entity Framework به پایان رسانده ای .
به یاد داشته باش که وظیفه Entity Framework این است که کلاس تو را به جدولی در بانک تبدیل کند .
اکنون به سراغ تنظیم اتصال به بانک اطلاعاتی می رویم.
تنظیم اتصال به بانک اطلاعاتی
اتصال بانک اطلاعاتی به نرم افزار با استفاده از Connection String (رشته اتصال) که در آن مسیر بانک اطلاعاتی مشخص می شود، انجام می شود.
رشته اتصال در فایلی به نام App.Config بعد از startup قرار می گیرد.
و Connection String به شکل زیر خواهد بود :
از طریق رشته اتصال ارتباط با sql server برقرار می شود . به عبارت دیگر رشته اتصال “آدرس بانک اطلاعاتی” است.
همانطور که در تصویر بالا می بینی، 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 را قرار دهی چون این پراپرتی در هنگام تبدیل این کلاس به جدول در بانک به عنوان کلید شناخته خواهد شد .
در صورتی که این پراپرتی را فراموش کنی با خطای زیر برخواهی خورد:
اکنون برای تبدیل کلاس human به جدول متناظر با آن در دیتابیس لازم است تا از کلاس human یک پراپرتی DbSet ، در کلاس DB که در بالا گفته شد قرار دهی.
باید برای هر موجودیت یا کلاسی که در پروژه داری یک Dataset بنویسی.
کلاسی به نام db بساز و کد زیر را در آن قرار بده:
class db
{
public DbSet humans { set; get; }
}
نکته:
در بالای کلاس db حتما برای استفاده از امکانات Entity Framework باید عبارت
using System.Data.Entity;
را به قسمت using های برنامه اضافه کنیم .
اکنون برای اینکه کلاس db بتواند نقش نماینده ای برای بانک اطلاعاتی را ایفا کند باید از DbContext ارث بری کند.
همچنین باید راهی باشد تا این کلاس بتواند بانک اطلاعاتی را بشناسد که از طریق نام رشته اتصال این اتفاق رخ می دهد .
بنابراین کلاسی که در بالا نوشتیم را به شکل زیر تکمیل می کنیم:
اکنون برای درج اطلاعات در بانک کافی است از کلاسی که به عنوان نماینده بانک اطلاعاتی ساختی نمونه گیری کنی.
سپس با استفاده از متد ()Add اطلاعات را در آن درج کنی و با استفاده از متد ()SaveChanges آن را ذخیره کنی.
به شکل زیر :
به طور کلی در این قسمت برقراری ارتباط با بانک اطلاعاتی با استفاده از Entity Framework در روش کدفرست را در ۴ مرحله گفتیم:
۱- نصب Entity Framework
۲- تنظیم رشته اتصال جهت برقراری ارتباط
۳- ساخت کلاس متناظر با موجودیتی که می خواهی در مورد آن اطلاعات ذخیره کنی
۴- ساخت کلاس متناظر با دیتابیس و جدول درون آن
۵- دریافت اطلاعات و ثبت در بانک اطلاعاتی
این ۵ قدم را در ویدئو زیر هم به تصویر کشیده ام تا بهتر بتوانی آن را درک کنی.
استفاده از Entity Framework در روش DatabaseFirst
تفاوت این روش با روش قبلی در این است که بانک اطلاعاتی و جداول آن از پیش ساخته شده اند و کارها بر اساس مدلی که از قرار است در ادامه ببینی انجام می شود.
ایجاد اولین مدل از روی پایگاه داده ها :
در پنجره ی Solution Explorer راست کلیک کرده و گزینه ی Add New Item را کلیک کن.
از پنجره ی ظاهر شده گزینه ی ADO.NET Entity Data Model را انتخاب کن.
حال پنجره ی Entity Data Model Wizard را مشاهده خواهی کرد.
گزینه ی Generate from Database را جهت مدل سازی از روی پایگاه داده های موجود، انتخاب کن و کلید Next را کلیک کن.
در این مرحله میتوانی بانک اطلاعاتی مورد نظر خود را انتخاب کنی:
در صورتی که کلید Next را فشار داده و همچنین یک فایل پایگاه داده انتخاب کرده باشی، پیغام زیر جهت آنکه “فایل بانک در مسیر پروژه کپی شود یا خیر؟ ” نمایش داده خواهد شد. که ترجیحاً این کار تایید نشود بهتر است.
در این قسمت در مورد نسخه Entity Framework ای که می خواهی استفاده کنی از تو خواهد پرسید:
بعد از تایید یا عدم تایید پیغام فوق پنجره ی زیر جهت انتخاب جداول، روالهای ذخیره شده و ویوها نمایش داده خواهد شد.
در این پنجره یک گزینه ی انتخابی با عنوان singularize generated object names” or “Pluralize وجود دارد که با انتخاب این گزینه نوع مدلی که از هر جدول (Entity Type) ایجاد میشود.
نامی منفرد و Entity ای که در پرس و جوها و ObjectContext برای ایجاد متدهای CRUD خودکار به کار گرفته میشوند، نام جمعی به خود میگیرند.
به عنوان مثال با انتخاب جدول Personel ، نوع این جدول در کلاسی با عنوان Personel (نام انفرادی) و Entity آن، نامی با عنوان Personels (نام جمعی) به خود میگیرد.
در قسمت پایین این گزینه نام محیط مدل سازی و ObjectContext مشخص میشود.
در نهایت در solution explorer نگاه کنید یک مدل با پسوند edmx. اضافه می شود. مانند شکل زیر:
و معادل جدول Person در مدل یک کلاس به شکل زیر خواهد بود.
خب ممکن سوالی که برایت پیش می آید این باشد که پس Entity Framework اش کجا است ؟
جواب : در روش دیتابیس فرست Entity Framework به همراه همان مدلی که می سازید، نصب می شود.
ممنون بابت مقاله خوبتون ، من مقاله های زیادی در مورد Entity خوندم ، منتهی به همین قشنگی توضیح داده نشدن ، خیلی عالی ادامه بده ، منتظر مقاله های بعدی هستیم ….
ممنونم خوشحالم که از این مقاله استفاده کردید
استاد عزیزم ممنونم از زحماتتون و مقاله خوبتون ❤❤❤❤❤❤❤❤❤❤
خواهش می کنم سیمای عزیز
خوشحالم که این مقاله به شما کمک کرد
خیلی عالی بود خانم شبر ممنون از بابت زحمات شما
سلام، خیلی عالی توضیح میدین، من قبلا توسط مقاله ای ک از شما خوندم با شما اشنا شدم، من خودم عاش برنامه نویسیم ولی تا حالا ب طور جدی و حرفه ای برنامه نویسی نکردم، نمیدونم ازکجا و چجوری شروع کنم میشه بهم کمک کنین. ی سوال دیگه اینکه بین ادامه تحصیل و کار کدومو ترجیح میدین؟
سلام
سرکار خانم شبر
واقعا عالی بود از اینکه اطلاعات و تجربه خود را دراختیار ما قرار می دهید واقعا ممنونم
مثل همیشه عالی هستید
با تشکر از خانم عمرانی و خانم شبر بزرگوار
موفق باشید
آرزوی بهترینهارو براتون دارم.
ممنون خانوم شبر بابت اطلاعات مفیدتون
ممنونم عالی بود
همینطور با قدرت پیش برید
مثل همیشه عالی