我想用现有基对象的外键在数据库中保存一个派生对象。这有可能吗?我有这样的东西:
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。我知道这是继承的原则,但我能实现我所描述的吗?
发布于 2019-02-01 02:34:10
继承意味着" is -a“关系,而不是"has-a”关系,这正是EF在数据库级别对其进行建模的方式。派生类型将具有使用其基类型创建的一对一外键。因此,您不能让多个派生项使用相同的基项,因为这将违反引用完整性。
长话短说,如果你想“分享”基本项目,它根本不应该是一个基本项目,而是通过组合添加的:
public class ChildA
{
public Base Base { get; set; }
}
public class ChildB
{
public Base Base { get; set; }
}显然,您需要在此时更改类名,因为它们已经不再有意义了。
https://stackoverflow.com/questions/54466123
复制相似问题