Entity Framework 中多重继承的替代方案
Alternative to multiple inheritance in Entity Framework
我想使用继承来加强 Entity Framework 模型 classes 中的一致性。例如,如果 X 个不同的模型都有一个地址,它们可以继承自:
public abstract class EntityAddress
{
[MaxLength(400)]
[Display(Name = "Street address")]
[DataMember]
public string AddressLine1 { get; set; }
[MaxLength(400)]
[Display(Name = "Address line 2")]
[DataMember]
public string AddressLine2 { get; set; }
[MaxLength(100)]
[Display(Name = "City")]
[DataMember]
public string City { get; set; }
[MaxLength(100)]
[Display(Name = "State")]
[DataMember]
public string State { get; set; }
[MaxLength(40)]
[Display(Name = "Zip code")]
[DataType(DataType.PostalCode)]
[DataMember]
public string ZipCode { get; set; }
}
这将确保所有地址在整个产品中始终如一地实施(是的,如果一个模型有两个地址,我们就会遇到问题,但出于本次讨论的目的,我会放弃这一点)。
我还希望 class 能够无限次使用这些概念。例如,如果模型有地址和全名,它可以这样做:
public class Customer : EntityAddress, EntityFullName
{
}
但是,C# 不支持多重继承。
有没有人对实现我在这里尝试做的好的替代方法有任何想法?我不相信接口会起作用,因为我无法将特性与属性一起嵌入。我不相信 class 属性 会起作用,因为我希望数据库中与基础 classes 关联的列与模型 table 相同 class属性。
你可以用 class 包装起来。它不漂亮,但它会达到类似的结果
public class Customer
{
public EntityAddress address {get;set;}
public EntityFullName fullname {get;set;}
}
复杂类型似乎是这个问题的答案(归功于 Ivan Stoev)。
https://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-2-complex-types
我想使用继承来加强 Entity Framework 模型 classes 中的一致性。例如,如果 X 个不同的模型都有一个地址,它们可以继承自:
public abstract class EntityAddress
{
[MaxLength(400)]
[Display(Name = "Street address")]
[DataMember]
public string AddressLine1 { get; set; }
[MaxLength(400)]
[Display(Name = "Address line 2")]
[DataMember]
public string AddressLine2 { get; set; }
[MaxLength(100)]
[Display(Name = "City")]
[DataMember]
public string City { get; set; }
[MaxLength(100)]
[Display(Name = "State")]
[DataMember]
public string State { get; set; }
[MaxLength(40)]
[Display(Name = "Zip code")]
[DataType(DataType.PostalCode)]
[DataMember]
public string ZipCode { get; set; }
}
这将确保所有地址在整个产品中始终如一地实施(是的,如果一个模型有两个地址,我们就会遇到问题,但出于本次讨论的目的,我会放弃这一点)。
我还希望 class 能够无限次使用这些概念。例如,如果模型有地址和全名,它可以这样做:
public class Customer : EntityAddress, EntityFullName
{
}
但是,C# 不支持多重继承。
有没有人对实现我在这里尝试做的好的替代方法有任何想法?我不相信接口会起作用,因为我无法将特性与属性一起嵌入。我不相信 class 属性 会起作用,因为我希望数据库中与基础 classes 关联的列与模型 table 相同 class属性。
你可以用 class 包装起来。它不漂亮,但它会达到类似的结果
public class Customer
{
public EntityAddress address {get;set;}
public EntityFullName fullname {get;set;}
}
复杂类型似乎是这个问题的答案(归功于 Ivan Stoev)。
https://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-2-complex-types