繁体   English   中英

实体框架代码第一个TPH继承 - 不同的子类可以共享一个字段吗?

[英]Entity Framework Code First TPH inheritance - can different child classes share a field?

我有一个使用Entity Framework Code First创建的实体框架模型,它使用Table Per Hierarchy继承,其结构看起来有点像这样:

public abstract class BaseState 
{
    public int Id { get; set; }

    public string StateName { get; set; }

    // etcetera
}


public class CreatedState : BaseState
{
    public User Owner { get; set; }

}

public class UpdatedState : BaseState
{
    public User Owner { get; set; }
}

现在是什么创造是我BaseStates表我已经Owner_IdOwner_Id1存储。 但是鉴于没有类将同时成为CreatedStateUpdatedState ,似乎对两者都使用单个Owner_Id是合乎逻辑的。 这也可以更容易地跟踪数据库。

我的基本问题是:Code First EF4可以实现吗?

我试图映射列:

public class CreatedState : BaseState
{
    [Column("OwnerId")]
    public User Owner { get; set; }

}

public class UpdatedState : BaseState
{
    [Column("OwnerId")]
    public User Owner { get; set; }
}

这似乎没有效果。

然后我尝试创建一个共享的父类,这可能是更正确的OO:

public abstract class OwnedState : BaseState
{
     public User Owner { get; set; }
}


public class CreatedState : OwnedState
{

}

public class UpdatedState : OwnedState
{

}

再一次,没有骰子。 或者,更令人担忧的是,这似乎在某些情况下有效,而在其他情况下却没有(显然我的实际配置稍微复杂一点),当我可以看到它确实工作的类之间没有区别时。

编辑以获取有关失败的更多详细信息:我有两个字段按照我上面描述的方式运行,我们可能会调用关联类OwnedStateActivityState ,这两个类都是以我上一个示例中显示的方式创建的抽象类。 OwnedState有两个派生自它的类, ActivityState有三个。 在数据库中,我有ActivityState_Id但也有OwnedState_IdOwnedState_Id1

除了它们引用的类型(两个其他实体)之外,我看不出OwnedStateActivityState类之间没有任何区别,但是在数据库中看起来好像EF以某种方式对它们进行了不同的解释 - 我不太了解EF内部结构足以知道它是如何做出这个决定的。

如果要让一个Owner_ID同时引用CreatedState和UpdatedState,则应将用户所有者放在BaseState中。

我不知道你试图用这个做什么,但从逻辑上讲,你不会将CreatedState和UpdatedState作为类,而是更多的State属性值(或数据库中的列)来保存状态(Created或Updated) )。 但是,再一次,也许你正在尝试别的东西......我想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM