عنوان:

‫استفاده از DataAnnotations در EF DataBase First


نویسنده: مهندس حسین حسینی
تاریخ: ۱۳۹۲/۰۸/۲۸ ۱۲:۰
آدرس: www.dntips.ir
همانطور که میدانیم DataAnnotations برای فیلد‌های مدل‌ها در MVC وقتی که از EF Code First استفاده کنیم کار ما را برای اعتبارسنجی بسیار ساده میکنند. اما وضع در EF Database First متفاوت است زیرا اگر مدلی را که برنامه برایمان میسازد را به روز کنیم ( توسط Updata Model) تمام اعتبارسنجی هایی که نوشته بودیم پاک شده و مدل خام دوباره برای ما تولید میشود . برای رفع این مشل باید از PartialClass استفاده نماییم تا بتوانیم همیشه اعتبارسنجی‌ها را داشته باشیم :

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    [MetadataType(typeof(MovieMetaData))]
    public partial class Movie
    {
    }


    public class MovieMetaData
    {
        [Required]
        public object Title { get; set; }

        [Required]
        [StringLength(5)]
        public object Director { get; set; }


        [DisplayName("Date Released")]
        [Required]
        public object DateReleased { get; set; }
    }

}

لینک مطلب اصلی : http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs

نظرات

  • لیلا در ۱۳۹۲/۰۸/۲۹ ۱۹:۲۳
    با تشکر
    اگر دیتابیس تغییر کند باید PartialClass  تغییر  را دستی تغییر بدهیم؟ اگر پاسخ بله می‌باشد راهی وجود دارد برای اعمال تغییر ات به صورت خودکار؟
    ایا توصیه می‌شود از view model به جای 
    PartialClass برای اعتبارسنجی استفاده شود؟
    • مهندس حسین حسینی در ۱۳۹۲/۰۸/۲۹ ۲۳:۹
      بله باید دستی تغییر کند ، راه خودکاری نمیدانم متاسفانه
      کلا بهتر است از viewmodel به جای استفاده از خود مدل استفاده کرد ولی به هرحال viewmodel نیز پس از تغییر دیتابیس باید دستی تغییر کند
  • مهمان در ۱۳۹۲/۰۹/۱۲ ۱۸:۲۳
    سلام.
    به خاطر مطلب خوبتون تشکر میکنم.
    من یه پروژه 2 لایه دارم که مدل در لایه DLL قرار گرفته.
    و یک لایه که پروژه MVC  داخل اون قرار گافته.
    میخواستم بدنم که  متادیتا  باید داخل کدوم لایه نوشته بشه؟
    • مهندس حسین حسینی در ۱۳۹۲/۱۰/۱۷ ۱۷:۵۹
      متادیتا داخل لایه DLL باشه بهتره