Does it make sense to use MetadataType to enforce validations in case of Code First?

前端 未结 4 1626
情书的邮戳
情书的邮戳 2021-02-13 11:10

I seem to understand the reason behind taking help of MetadataTypeAttribute to Add Validation to the Model in case of Database First as we want to avoid the changes

4条回答
  •  暖寄归人
    2021-02-13 11:47

    I don't know why you are trying to employ a Database first technique to a more complete, say, Code first since you can create ViewModels to meet your purpose. Also not all the data annotations are supported in Entity Framework.

    MetadataType limitations

    1. It cannot be applied to a property and can be only be applied to a single class for each class type.
    2. This attribute cannot be inherited, so you cannot customize it.
    3. On the other side, this attribute can be applied to partial class which is the main purpose of this attribute.
    4. This attribute will be respected by ASP.NET MVC but will not be read by Entity Framework.

    Cons of using MetadataType

    • you have to use ViewBag, ViewData or something else to pass additional information to the view
    • Your design is less testable since it relies on a static object mechanism.
    • It is also not required and someone could omit it without breaking anything.
    • It also means that you are splitting your model class into 3 files. One generated, one of yours and one with attributes.

    If you want to add attributes to existing properties in a class (partially) :

    This may work or be ignored by the EF, test it:

    public partial class YourModelClass
    {
        public string YourProperty{get;set;}
    }
    
    //Your Partial Class
    [MetadataType(typeof(YourModelClassMetaData))]
    public partial class YourModelClass
    {
    }
    
    //The class that adds your attributes
    public class YourModelClassMetaData
    {
        [Required]
        public object YourProperty{get;set;}
    }
    

提交回复
热议问题