簡體   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