ViewModel 中的 DataAnnotations w/o 覆盖 DomainModel 属性

DataAnnotations in ViewModel w/o overriding DomainModel Properties

如何在不覆盖其属性的情况下在继承域模型的视图模型中添加DataAnnotation

User 领域模型

public class User{
  public string UserName { get; set; }
  public string Password { get; set; }
}

Register 查看模型

public class Register : User{

  [Required]  
  public string Password { get; set; }
}

在这里,有没有一种方法可以将 DataAnnotation 添加到 UserNamePassword 而无需在 Register 视图模型中继承这些属性?

您可以创建一个 customrequired 属性并将其继承 属性 设置为 false

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field 
    | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
    public class CustomRequiredAttribute : RequiredAttribute
    { 
    }

因此您的用户域模型如下所示:

  public class User{

  [CustomRequired]
  public string UserName { get; set; }
  [CustomRequired]
  public string Password { get; set; }
}

现在你的寄存器模型如下

public class Register : User
{
public string Password{get;set;}
}

所以现在所需的 属性 不会被 child class 继承,如果你深入挖掘 Required 属性,你可以找到你的 Inherited 布尔值 属性 如下所示:

Summary: Gets or sets a Boolean value indicating whether the indicated attribute can be inherited by derived classes and overriding members.

Returns: true if the attribute can be inherited by derived classes and overriding members; otherwise, false. The default is true.