我有一个使用 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_Id
并Owner_Id1
存储的表中。但是鉴于没有一个类会同时是 aCreatedState
和 anUpdatedState
似乎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
{
}
再次,没有骰子。或者,更令人担忧的是,这似乎在某些情况下有效,而在其他情况下则无效(显然我的实际配置稍微复杂一些),而我可以准确地看到它工作的类之间没有区别。
编辑以获取有关失败的更多详细信息:我有两个字段的行为方式与我上面描述的方式相同,我们可能会调用关联的类OwnedState
和ActivityState
,我已按照上一个示例中所示的方式将它们创建为抽象类。OwnedState
有两个派生自它的类,ActivityState
有三个。在我的数据库中,ActivityState_Id
还有.OwnedState_Id
OwnedState_Id1
除了它们引用的类型(其他实体)之外,我看不出OwnedState
和ActivityState
类之间没有任何区别,但在数据库中,似乎 EF 以某种方式对它们进行了不同的解释——我不太了解 EF 内部结构知道它是如何做出这个决定的。