我有一个实体(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; }
}
答案 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)他们就好了)