Data Annotation و Migration در Entity Framework

پنجشنبه 23 مهر 1394

در این پست می خواهیم data annotation و code first migration را در Entity Framework بررسی کنیم. data annotation صفت ها و migration برای بروز رسانی بانک اطلاعاتی می باشد.

Data Annotation و Migration در Entity Framework

Data Annotation در Entity Framework مفید می باشد. که ما می توانیم برای کلاس مدل خود اعمال کنیم و می توانیم اعتبار سنجی بیشتری را به اجرا در آوریم. آن کلاس هایی را ایجاد می کند که برای Entity Framework Dbset ما metadata را فراهم می کند. 

در فایل برنامه پوشه app_data را انتخاب کرده و فایل (mdf.) دیتابیس را باز کنید سپس در جدول Artist قرار بگیرید. ستون ArtistName از نوع (nvarchar(max بوده و همچنین بصورت Allow null می باشد.

انتخاب نوع داده از نوع max قراردادی است که Entity Framework از آن استفاده می کند. ما فقط مشخص کردیم که از نوع رشته می باشد اما مگفتیم که تا چقدر می تواند بزرگ باشد. بنابراین این برای Entity Framework منطقی می باشد که ArtistName را به ببیشترین اندازه ایجاد کند. برای استفاده از DataAnnotations باید به System.ComponentModel.DataAnnotation مراجعه کنیم.

زمانی که آن به شماره می آید EntityFramework  نوع داده SQL را به نوع داده NET. ترسیم خواهد کرد. برای مثال long به bigint تبدیل می شود.

DateTime اساسا یک نوع مقداری می باشد. بنابراین نمی تواند تهی باشد و باید یک مقدار را نگه دارد. بعنوان مثال در نظر بگیرید که ما یک سفارش محصول (productOder) داریم. یک سفارش محصول یک تاریخ سفارش و یک تاریخ ارسال خواهد داشت. تاریخ سفارش می تواند تاریخ را درخواست کند بنابراین می توانیم در تمام مدت یک مقدار داشته باشیم اما، در مورد تاریخ ارسال یک امکان وجود دارد که تاریخ ارسال تا زمان ارسال کالا به مقصد تهی باشد. برای انجام آن <nullable<T است که در آن T یک نوع متغیر است و گزینه دیگری برای این، استفاده از کلمه کلیدی با علامت ؟ می باشد.

برای مثال : Nullable<DateTime> shipDate یا DateTime? shipDate که هردو قابل قبول می باشند. درفایل برنامه از پوشه modelفایل Artist.Cs را باز کنید و دو صفت زیر را به ArtistName اضافه کنید:

1- ()Required :  که نشان می دهد که این فیلد حتما باید پر شود.

2- String Lenght : که از حداکثر طول بعنوان اولین صفت و حداقل طول بصورت اختیاری استفاده می کند.

که Artist.cs بصورت زیر خواهد شد:

 

همچنین بعنوان قراداد در EntityFramework اگر فیلدی بعنوان ID یا با پسوند ID باشد، آن را بعنوان کلید اصلی ایجاد خواهیم کرد.

Entiy Framework نام کلاس، نام جدول را خواهد ساخت همچنین اگر بخواهیم این رفتار را با نام جدید تغییر دهیم سپس می توانیم از صفت [("Table("newname] استفاده کنیم.

اکنون برنامه را build کرده و Artist/Index را اجرا کنید. 

اکنون با Invalid Operation Exception مواجه خواهید شد. این پیغام می گوید که DataContext از زمانی که ساخته بودید، تغییر کرده است و پیشنهاد می کند که برای بروز رسانی دیتابیس از migration استفاده کنید.

 

به روز رسانی بانک اطلاعاتی در صورت تغییر model

برای انجام code first migration باید مراحل زیر را انجام دهیم.

1- package manager console را باز کنید.

2- دستور Enable-Migration را مانند تصویر وارد کنید.

 

در این پیغام می گوید که بیشتر از یک نوع context وجود دارد. یکبار CodeFirstDemoContext را ایجاد کردیم و دفعه بعد UserContext پیش فرض برای identity managment  و همچنین پیشنهاد می دهد که چگونه آن را که ما ایجاد کردیم بروزرسانی کنیم.

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

Enable-Migrations –ContextTypeName CodeFirstDemo.Models.CodeFirstDataContext – EnableAutomaticMigrations

3- ما نیاز به بروزرسانی بانک اطلاعاتی داریم.

برای انجام تغییرات در بانک اطلاعاتی، از دستور update-database -script استفاده می کنیم.بعد از اجرای این دستور با یک پیغام خطا مواجه می شویم. این پیغام خطا برای است که اندازه فیلد ArtistName را از max به 100 تغییر داده ایم. بنابراین entity framework فکر می کند که قبلا نام هایی بیشتر از مقدار تعیین شده وجود داشته که الان از بین رفته اند و به ما هشدار می دهد.

بنابراین در این مورد می دانیم که داده ای وجود نداشته پس بانک اطلاعاتی را با دستور updatedatabase -script -force بروزرسانی می کنیم. 

باز شدن فایل اسکریپت

به دو تغییر زیر نگاه کنید. جدول Artist با Alter query بروز رسانی می شود و یک جدول دیگر به نام MigrationHistory می سازد و تغییرات را به آن اضافه می کند. این جدولی است که Entity Framework با نگاه کردن به آن مشخص می کند DataContext و پایگاه داده هرزمان که برنامه را اجرا می کنند مانند هم هستند.

اکنون نیاز است که آن را اجرا کنیم. ما می توانیم کوئری ها را هم بصورت دستی با استفاده از SQL Server Managment Studio و هم با استفاده از Package Manager Console انجام دهیم.

اکنون فایل mdf را از solution Explorer باز کرده و تغییرات را مشاهده کنید.

 

Allow Nulls مقداری را بررسی نمی کند و برای ArtistName اندازه حداکثر طول 100 کاراکتر می باشد.

برای اجرای برنامه باید برنامه را build کرده و Artist/Index را اجرا کنید.

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

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

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

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

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