我有一个如下所示的类结构:
class Person
{
public virtual string FirstName {get;set;}
public virtual string LastName {get;set;}
public virtual Address HomeAddress {get;set;}
}
class Address
{
public virtual string Street {get;set;}
public virtual string City {get;set;}
public virtual string State {get;set;}
public virtual string ZipCode {get;set;}
public virtual string Country {get;set;}
}
然后我想到了一个具有必需地址的人和一个使用RequiredAddress的人......所以我的新“必填”地址如下所示:
class RequiredAddress
: Address
{
[Required]
public override string Street {...}
[Required]
public override string City {...}
[Required]
public override string State {...}
[Required]
public override string ZipCode {...}
[Required]
public override string Country {...}
}
但是当我刚刚在RequiredPerson地址的Address字段中新建一个RequiredAddress实例时,MVC似乎无法检测到[Required]标记,我最终不得不这样做:
class PersonRequiredAddress
: Person
{
public new RequiredAddress Address {get;set;}
}
现在,因为我们必须这样做,所以我们不得不重新做DAL以处理对象的差异......这对我来说感觉像是一种可怜的代码味道。任何人都可以为我们面临的这种困境提供更好的解决方案吗?
答案 0 :(得分:1)
您可以将Person
更改为class Person<TAddress> where TAddress : Address
吗?然后是class PersonRequiredAdderss : Person<RequiredAddresss>
。
答案 1 :(得分:0)
看看动态附加数据注释
其他人在这里得到了这个问题 DataAnnotations dynamically attaching attributes