Migration در Entity Framework Code First

سه شنبه 14 مهر 1394

در این مقاله قصد داریم توضیحاتی درباره Entity Framework و استفاده از روش های مختلف در آن و خصوصا روش Code First ارائه دهیم . Entity Framework چیست و چرا از آن استفاده می شود. راه کارهای موجود در آن چیست و روش مهاجرت به چه صورت انجام می گیرد.

Migration  در   Entity Framework Code First

Entity Framework

Entity Framework یک چارچوب نقشه برداری یا نگاشت رابطه ای اشیاء (ORM) است که توسعه دهندگان را قادر می سازد به کار با داده های رابطه ای که یک شیء خاص دامنه دارند، و حذف شدن استفاده از بسیاری از کدهای دسترسی به داده ها که معمولا توسعه دهندگان برای نوشتن نیاز دارند.

Entity Framework یک برتری نسبت به ADO.net دارد که به توسعه دهندگان یک مکانیزم خودکار برای دسترسی و ذخیره سازی داده ها می دهد.

توسعه دهندگان می توانند برای گرفتن داده ها از پایگاه داده با استفاده از Entity Framework کوئری های LINQ بنویسند.

Entity Framework برای بازیابی و دستکاری داده به عنوان اشیاء از نوع strongly به ما کمک می کند.

راه کارهای Entity Framework

Model First .: مدل پایگاه داده در زمان اولین بار استفاده از ابزار طراحی ORM در ویژوال استودیو ساخته می شود. هنگامی که مدل متشکل از سازمان و روابط طراحی شد، پایگاه داده فیزیکی و کلاس از مدل با کمک از  Entity Framework به صورت خودکار تولید خواهد شد.

Data Base First .: از همان ابتدا پایگاه داده ایجاد شده است و یا می توانیم از پایگاه داده های موجود استفاده کنیم و سپس به کمک Entity Framework  کدهای مورد نیاز به صورت خودکار تولید خواهد شد.

Code First .: ایجاد یک مجموعه ای از کلاسها . اول کد و پایگاه داده به صورت خودکار توسط کمک های Entity Framework تولید خواهد شد.

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

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

Logical or Storage Model . (منطقی یا مدل ذخیره سازی ) : معاملات با جداول، کلید اصلی، کلید های خارجی و غیره می باشد که توسط یک گروه با عنوان پایگاه داده محور به کار گرفته می شود.

Conceptual or Object Oriented Domain Model . ( مفهومی و یا مدل دامنه شی گرا) - معاملات با اشیاء، خواص، ارث بری پلی مورفیسم و غیره می باشد که توسط یک گروه  با عنوان کاربرد محور به کار گرفته می شود.

 . به عنوان یک نتیجه از این دو مدل عدم تطبیق امپدانس رخ می دهد و توسعه دهندگان  وقت و انرژی زیادی در نوشتن یک کد دسترسی به داده ها مانند Ado.net برای نگاشت و وارد کردن آن به پایگاه داده اختصاص می دهند .

. چارچوب Ado.net Entity  به دنبال برطرف کردن مشکل با ارائه لایه ای انتزاعی بین مدل منطقی داده ها و مدل دامنه کاربردی است .

 

روش مهاجرت Code First  در Entity Framework

. به طور عمده در رویکرد توسعه دامنه محور (DDD) استفاده می شود. ما می توانیم در طراحی دامنه تمرکز کنیم و بر اساس نیازهای دامنه شروع به نوشتن کلاس ها کنیم.

. Api  در Code First یک پایگاه داده بر اساس کلاس موجودیت و پیکربندی آن ایجاد خواهد کرد.

. در Code First درEntity Framework 4.2  و قبل تر از آن، به استفاده از یک روش Initializer پایگاه داده و رسیدگی یا حفظ داده ها در زمانی که یک تغییر در مدل ایجاد می شد نیاز داشتیم.

. روش Migration درCode First  در مقایسه با نسخه های قبلی بسیار مفید است، که قادر است تغییرات را دنبال و به صورت هوشمند به تغییرات مدل رسیدگی کند. بدون نیاز به فکر درباره حذف و دوباره ایجاد کردن داده ها.

. Code First به شما اجازه می دهد یک دیتابیس جدید اضافه کنید یا دیتابیس موجود را بر اساس کلاس مدل خود را با استفاده از Pakage manager موجود روی ویژوال استودیو به روز رسانی کنید.

 

مزایای استفاده از Code First  در Entity Framework

Entity Framework . توسعه دهندگان را به ایجاد نرم افزار دسترسی به داده ها توسط برنامه نویسی مدل برنامه مفهومی به جای برنامه نویسی دوباره طرح ذخیره سازی داده های رابطه ای قادر می سازد.

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

. Entity Framework یک ابزار ORM است که یک API ساده برای انجام عملیات CRUD فراهم میکند.

. Entity Framework همچنین به ما کمک می کند تا  برخی از عملیات DDL و DML بصورت خودکار و نه به صورت دستی انجام شود.

. Entity Framework شامل کلاس های نوع Strongly  می شود ، از جمله :

         . Intellisense support

                   Compile time .         

         . Debugger option

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

. زمان زیادی ذخیره خواهد شد و به ما کمک می کند تا به سرعت نرم افزارها را توسعه دهیم و تمرکز بیشتر بر روی جزئیات کار داشته باشیم .

برای روشن شدن توضیحات بالا یک نمونه مثال می زنیم .

یک پروژه جدید از نوع MVC  ایجاد میکنیم.

قالب مورد نیاز را انتخاب میکنیم .

 

برای نصب Entity Framework 5 به شکل زیر عمل میکنیم .

به پوشه  Tools بروید ->  Pakage Manager Console <- Library Pakage Manager

با کد زیر Entity Framework  را نصب میکنیم :

install-package entityFramework -version 5.0.0.0


 

 

در روت پروژه یک فولدر با نام DBContext ایجاد میکنیم.

یک کلاس برای DBContext  ایجاد میکنیم که مانند یک پل بین دیتابیس و LINQ عمل میکند.

DBContext  یک لایه مفهومی بین برنامه و دیتابیس فراهم میکند.

DBSet نماینده جدولی که در دیتابیس حاضر است خواهد بود.

به web.Config  بروید و کانکشن مورد نیاز را ایجاد کنید.

خاصیت های مورد نیاز کانکشن مانند data source  و initial catalog  و name  و ... را تنظیم کنید.

 

به کنسول Pakage manager  بروید .

برای استفاده از روش مایگریشن دستور زیر را اجرا کنید :

Enable-Migrations -ContextTypeName DNSContext

Code-First Migrations از داده ها مراقبت می کند. پس ما نیازی به نوشتن متد های پایگاه داده که در ورژن های قدیمی تر استفاده می شد نداریم.

اولین بار بعد از فعال کردن Migration  برای استفاده از آن باید یک Migration  اضافه کنیم.

اضافه کردن Migration  یک فایل Migration  و کدهای sql  ایجاد میکند که تا زمانی که دستور  update-database راه اندازی نشده است در سرور sql  اجرا نخواهد شد.

 

 

فایل کد Migration  تولید شده است.

دستور update-database  ، بوسیله اجرای کدی که در فایل Migration  است ، دیتابیس را راه اندازی خواهد کرد .

زمانی که آن را برای اولین بار ایجاد میکنیم ،دیتابیس جدید با توجه به خواصی که به Connection string  داده شده بود دیتابیس را می سازد .

 

یک مدل با نام Course  به صورت زیر ایجاد میکنیم .

 

در کلاس context یک خاصیت DbSet  اضافه میکنیم.

Migrtion  را اضافه و دیتابیس را آپدیت میکنیم .

 

ایجاد یک عملیات CRUD با استفاده از Scaffolding

یک کنترلر با نام Course اضفه میکنیم . الگوی scaffolding  به صورت زیر باشد.  

MVC controller with read/write actions and views, using Entity Framework

کلاس Data Context  خود را انتخاب کنید .

عملیات CRUD  در کنترلر Course  با ویوهای متناظر با استفاده از الگوهای scaffolding  و متدهای  Entity Framework  ایجاد می شود .

یک ActionLink  در نوار Navigation  اضافه میکنیم.

 

ایجاد یک DropDownList در MVC

در ویو create یک DropDownlist  با متغیرهای مقدار داده شده در دامنه Entity  ایجاد میکنیم .

 ویو Create  به صورت زیر نمایش داده می شود.

اگر بخواهیم متغیرها مقدارشان را از کنترلر بگیرند به صورت زیر عمل میکنیم.

viewBag را در ویو فراهم میکنیم .

 

 ایجاد یک مدل برای صفحه نمایش دانش آموزان و به روزرسانی دیتابیس با استفاده از Migration

یک مدل جدید برای دانش آموزان ایجاد میکنیم.

 

یک خاصیت جدید به  DBContext  اضافه میکنیم .

 

یک Migration  جدید برای ایجاد جدول دانش آموزان در دیتابیس اضافه میکنیم .

از دستور Add-Migration  برای ایجاد فایل مایگریشن استفاده  می کنیم.

 

با استفاده از دستور Update-database در کنسول Pakage manager  ، دیتابیس را به روزرسانی می کنیم.

یک کنترلر جدید برای Student  با همان خاصیت readWrite  ایجاد می کنیم.

عمل ایجاد در MVC

کنترلر  Student  ایجاد شده است .

یک ویو برای صفحه Create ایجاد میکنیم .

برنامه را اجرا کنید و به صفحه Student/Create بروید.

یک شی برای DNSContext ایجاد میکنیم.

یک متد HttpPost برای وارد کردن داده ها به دیتابیس ایجاد میکنیم .

 

 

عمل بارگذاری  در MVC

یک ویو برای نمایش دادن لیست دانش آموزان ایجاد میکنیم.

صفحه index  را برای نمایش تمام اطلاعات در لیست اصلاح می کنیم :

 

 

عمل ویرایش یا به روزرسانی در MVC

 

عمل Post  در MVC برای به روزرسانی رکوردهای دانش آموزان

 

عمل جزئیات

عمل حذف در MVC

 

در پایان صفحه دانش آموزان با همه عملگرهای CRUD ایجاد شد.

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید