替代实体框架中的多重继承

时间:2017-03-16 14:23:46

标签: c# entity-framework inheritance multiple-inheritance

我想使用继承来强制实体框架模型类中的一致性。例如,如果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; }
}

这将确保在整个产品中始终如一地实施所有地址(是的,如果模型有两个地址,我们就会遇到问题,但为了本次讨论的目的,我会将其推迟)。

我还希望能够让一个班级使用无限数量的这些概念。例如,如果模型具有地址和全​​名,则可以执行以下操作:

public class Customer : EntityAddress, EntityFullName
{

}

但是,C#不支持多重继承。

有没有人对良好的替代方法有任何想法,以实现我在这里尝试做的事情?我不相信界面会起作用,因为我不能用属性嵌入属性。我不相信类属性会起作用,因为我希望与基类关联的数据库中的列与模型类属性位于同一个表中。

2 个答案:

答案 0 :(得分:2)

复杂类型似乎是这个问题的答案(归功于Ivan Stoev)。

https://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-2-complex-types

答案 1 :(得分:1)

你可以在课堂上包装。它不漂亮,但它会取得类似的结果

public class Customer 
{
   public EntityAddress address {get;set;}
   public EntityFullName fullname {get;set;}   
}