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