Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中多重继承的替代方案_C#_Entity Framework_Inheritance_Multiple Inheritance - Fatal编程技术网

C# 实体框架中多重继承的替代方案

C# 实体框架中多重继承的替代方案,c#,entity-framework,inheritance,multiple-inheritance,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

我想使用继承来加强实体框架模型类中的一致性。例如,如果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#中不支持多重继承


有没有人有什么好的替代方法来实现我在这里要做的事情的想法?我不相信接口会起作用,因为我不能将属性嵌入属性中。我不相信类属性会起作用,因为我希望数据库中与基类关联的列与模型类属性位于同一个表中。

您可以封装在类中。这并不漂亮,但也会取得类似的效果

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

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


使用构图。客户有一个地址(客户不是地址)。看起来是您需要的。使用标准类,组合是明确的解决方案。不过,使用EF,类的结构定义了数据库中的表。我相信使用组合不会在数据库中给出正确的模式。我将回顾复杂类型,它看起来基本上类似于组合。谢谢我会用我的发现更新这个。这就是为什么T4是模板。可以使其呈现复杂类型。在黑白世界中进行一点有趣的黑客攻击。这不会导致客户表与数据库中的EntityAddress表和EntityFullName表有关系吗?我希望所有属性都映射到数据库中的一个表中。啊!这是正确的。您可以将其包装到实体框架之外。像CustomerRapper一样创建,包括Customer、Address和Full name属性,然后在实例化时在构造函数中运行查询