[英]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_Id
和Owner_Id1
存儲。 但是鑒於沒有類將同時成為CreatedState
和UpdatedState
,似乎對兩者都使用單個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內部結構足以知道它是如何做出這個決定的。
如果要讓一個Owner_ID同時引用CreatedState和UpdatedState,則應將用戶所有者放在BaseState中。
我不知道你試圖用這個做什么,但從邏輯上講,你不會將CreatedState和UpdatedState作為類,而是更多的State屬性值(或數據庫中的列)來保存狀態(Created或Updated) )。 但是,再一次,也許你正在嘗試別的東西......我想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.