我想使用现有基础对象的外键将派生对象保存在数据库中。可能吗 我有这样的东西:
public class Base
{
public int BaseId { get; set; }
}
[Table("ChildA")]
public class ChildA : Base
{
/*...*/
}
[Table("ChildB")]
public class ChildB : Base
{
/*...*/
}
我有一个现有的ChildA,并且想要创建一个与ChildA具有相同BaseId的ChildB。问题是EntityFramework不允许我这样做。如果我尝试保存通过现有BaseId的ChildB,则会创建一个新的Base。我了解这是继承的原则,但是我可以实现我所描述的吗?
答案 0 :(得分:0)
继承意味着“是”关系,而不是“具有”关系,这正是EF在数据库级别建模的确切方式。派生类型将使用其基本类型创建一对一的外键。这样,就不能具有多个衍生项利用相同的基本项目,因为这将违反参照完整性。
简短地说,如果您想“共享”基础项目,那么它根本不应该是基础项目,而应通过组合添加:
public class ChildA
{
public Base Base { get; set; }
}
public class ChildB
{
public Base Base { get; set; }
}
很明显,此时您要更改类名,因为它们不再有意义。