猿问

有没有办法让两个子对象使用继承引用同一个基对象?

我想使用现有基本对象的外键在我的数据库中保存派生对象。这有可能吗?我有这样的东西:


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。我知道这是继承的原则,但我能实现我所描述的吗?


holdtom
浏览 74回答 1
1回答

慕村9548890

继承意味着“is-a”关系,而不是“has-a”关系,这正是 EF 在数据库级别对其进行建模的方式。派生类型将创建一个使用其基类型创建的一对一外键。因此,不能让多个派生项使用同一基项,因为这会违反参照完整性。长短两用,如果要“共享”基本项,则根本不应该是基本项,而是通过组合添加:public class ChildA{    public Base Base { get; set; }}public class ChildB{    public Base Base { get; set; }}显然,您希望在此时更改类名,因为它们不再真正有意义。
随时随地看视频慕课网APP
我要回答