توجه: برای دسترسی به تمام محتویات این صفحه از جمله فیلم آموزشی و دانلود ضمیمه ها می بایست با استفاده از حساب کاربری خود به سایت وارد شده باشید. همچنین شما میبایست شماره تلفن همراه تان را از طریق صفحه پرونده کاربری تایید کرده باشید.

صفحه مدیریت پرونده کاربری

افزودن Metadata به کلاس های مدل در روش EF Database First

اگر در ASP.NET MVC از روش Database First برای کار با دیتابیس تان استفاده کرده باشید قطعا با یک مشکل آزار دهنده روبرو شده اید:

پس از افزودن صفت های Metadata به کلاس های ساخته شده توسط EF ، پس از هر گونه تغییر در ترکیب مدل، تمام صفت ها پاک می شوند!

راهکار حل این مشکل استفاده از کلاس های Metadata Buddy Classes است. با استفاده از این کلاس ها می توان صفت ها را در یک کلاس جداگانه نگهداری کرد که در معرض خطر Overwrite شدن توسط بازسازی کلاس ها برای برخورداری از تغییرات مدل قرار نگیرند.

این کلاس ها با افزودن یک صفت به نام [MetadataType] به بالای کلاس های مدل انجام می شود. صفت فوق نیز در Namespace ای به نام System.ComponentModel.DataAnnotations قرار دارد. این Namespace هم باید در لیست using های هر کلاس مدل Import شود تا صفت فوق کار کند.

مشکل اینجاست که با هر بار بازسازی کلاس های مدل، صفت MetadataType و Namespace حاوی این صفت از درون کلاس های مدل پاک می شوند.

با تماشای این ویدئو می توانید یاد بگیرید چگونه با دستکاری کردن قالب های T4 مربوط به Entity Framework می توانید این مشکلات را حل کنید.

تگ ها:

ASP.NET MVC 6 Metadata 1 Buddy Classes 1 T4 2 Template 2 Customization 3 Entity Framework 3 Database First 1

 

محمدرضا خوشبختی داریان

یکشنبه 15 مهر 1397 ساعت 13:32

بسیار کاربردی و دقیق بود. استاد نظر شما استفاده از کد فرست هست یا دیتابیس فرست؟ برای پروژه های در حد فروشگاه و اتوماسیون اداری متوسط کدوم رو پیشنهاد میدید؟

مهدی کرامتی

شنبه 18 اسفند 1397 ساعت 17:09

من در اکثر پروژه های شخصی ام از روش Database First استفاده می کنم.

ابراهیم رمضانی

دوشنبه 12 فروردین 1398 ساعت 13:09

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

رضا محمدزاده

پنجشنبه 19 اردیبهشت 1398 ساعت 14:04

با تشکر از کمکتون . ممنونم

حبیب تیموری

یکشنبه 13 بهمن 1398 ساعت 22:22

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

مهدی کرامتی

یکشنبه 13 بهمن 1398 ساعت 23:53

سلام. در EF Core دیگه روش Database First وجود نداره و فقط Code First کار می کنه. بنابراین Metadata رو مستقیما روی خود کلاس های مدل می توانید اضافه کنید و چون فقط خودتون مسئول به روز رسانی کلاس ها هستید خیال تون راحته که این تغییرات از بین نمیره.

farzad pmh

سه شنبه 11 شهریور 1399 ساعت 14:15

نوکرم. عالی بود