2015-04-02 52 views
0

林不知道這是否可能。 假設我有這樣的:EF6導航屬性相同類型爲單一反轉

public class Thing{ 
    public int ThingId {get; set;} 
    public virtual Item ItemA {get; set;} 
    public virtual Item ItemB {get; set;} 
} 

public class Item{ 
    public int ItemId {get; set;} 
} 

我如何能夠讓項目這使我要麼ItemAItemB一個導航屬性?或者我可以使用的東西item.Thing!=nullitem.Thing.ItemAitem.Thing.ItemB

我已經嘗試了一堆東西,但不能得到它的工作。

+0

我不清楚你想要做什麼。你能改說嗎? – 2015-04-02 19:59:07

+0

我想設置項目上的導航屬性,以便它與Thing有關係,但是當我嘗試獲取級聯刪除的外鍵約束錯誤時,因爲對於Item類型的Thing有兩個導航屬性。但我不知道如何註釋該類或使用流暢的語法將級聯刪除設置爲false。我希望有比我想象的更好的方法。 – jmichas 2015-04-02 21:39:45

+0

'Item'不能與'Thing'有兩個一對一的關聯,那麼如果'Item'有很多'Thing',那麼如何導航到一個'Thing.ItemA'? – 2015-04-02 21:58:28

回答

0

Thing類中有兩個項目,這意味着單個項目可以是一個或多個項目的一部分。 (例如:同樣的項目可以是Thing1的ItemA,它可以是Thing2的ItemB)。在這種情況下,Item表中不能有FK列,因爲它與Thing具有一對多的關係。

你可以做的最好的事情是讓Item類擁有它所屬物品的列表。您還可以確定它是ItemA的哪些事物,以及它是ItemB的哪些事物。

class Thing 
{ 
    public int ThingId { get; set; } 

    [InverseProperty("ItemAFor")] 
    public Item ItemA { get; set; } 

    [InverseProperty("ItemBFor")] 
    public Item ItemB { get; set; } 
} 

class Item 
{ 
    public int ItemId { get; set; } 

    // Things where this Item is ItemA 
    public List<Thing> ItemAFor { get; set; } 

    // Things where this Item is ItemB 
    public List<Thing> ItemBFor { get; set; } 
} 
+0

感謝您的信息,這是我害怕的。事實是,Thing.ItemA和Thing。 ItemB將是不同的Items和Item只會屬於一個Thing.ItemA或Thing.ItemB。如果有其他人有進一步的信息會很好。我有一些想法,我可以做到這一點,但我基本上讓ItemA/B便利獲得者從訂購的列表中查找物品。這樣,兩者之間的關係是很簡單的。謝謝! – jmichas 2015-04-03 05:53:50