使用Entity作为属性,但使其成为复杂类型

时间:2013-12-23 15:25:17

标签: c# entity-framework entity-framework-6

我有一个实体(A),它将数据存储在自己的表中。我想让这个实体成为另一个实体(B)的属性,但是将其所有数据存储在实体B的表中(有点像复杂类型),这样我就可以在那时写出实体的确切值。

我自己尝试过这样做,但实体B总是将实体A视为外键,即使该属性不是虚拟的,我也尝试继承无法正常工作。我可以制作一个实体A类型的精确副本并分配给它来解决它,但我是一个很大的DRY粉丝,觉得它会增加不必要的复杂性。

提前致谢

编辑:下面的代码,我无法发布原始代码,但这里有一种它的样子

public class EntityA {

    [Key]
    public int id { get; set; } 

    public int prop1 { get; set; }

    public virtual AnotherEntity { get; set; }
}


public class EntityB {

    // foreign key as part of composite key
    // entity C code not included as doesn't
    // affect the problem
    [Key, Column(Order=0)] 
    public int EntityCId { get; set; }   

    public virtual EntityC { get; set; }

    // this is set as part of the composite key
    // as I want to use entity ID but 
    // not make the field foreign key
    [Key, Column(Order=1)]
    public EntityA saveInToEntityBTable { get; set; }     

}

1 个答案:

答案 0 :(得分:0)

解决了它,你要做的是抽象一个可以继承的基类。由于基类是抽象的,因此永远不会创建表,因此继承类没有要链接的外键。

public class EntityA : EntityABase {


}

public abstract class EntityABase {

    [Key]
    public int id { get; set; } 

    public int prop1 { get; set; }

    public virtual AnotherEntity { get; set; }
}

public class EntityB : EntityABase {

    [Key]  
    public virtual EntityC { get; set; }

}

注意:如果您不想使用抽象类,则可以使用TPC(每个具体类型的表)但是我遇到了迁移问题而没有为EntityB上的属性“AnotherEntity”创建列或外键(创建实体A)他们就好了)