2011-05-02 29 views
0

我有一個linq實體映射問題。我有三張桌子。Linq映射與1到0.1關係的問題

表1 - ItemsB(ID(密鑰),零件號碼(將是空的,直到建),其他b項信息)
表2 - ItemsA(ID(密鑰),零件號碼(將是空的,直到建),其他項目信息)
表3 - WebItems(Item_id,Web項目信息)*由ItemsB和ItemsA構建並推送到此表後的項目組成。

ItemsA/ItemsB將與WebItems有1到0.1的關係。 Part_Number映射到Item_id。

我正在使用EF4.0。

問題是如上所述我建立關聯/映射後,我得到一個錯誤消息,指出:「映射片段在行左右等問題:列[Part_Number]被映射到兩個片段不同的概念側屬性「。

通常我知道該怎麼辦。擺脫財產[Part_Number]。問題是我需要很頻繁地訪問ItemsB和ItemsA中的[Part_Number],而不必訪問webitems。更何況webitems並不總是有[Part_Number]填充在某些點取決於項目是否被推送到webitems。

有誰知道如何解決這個問題?

在此先感謝。

回答

0

據我瞭解它ItemAItemBWebItem在一對一的關係。 EF中的一對一關係總是要求關係建立在主鍵上,而一方是強制性的(主體),因爲依賴實體在一個列中具有主鍵和外鍵。在依賴實體中分配主鍵後,您必須具有主體實體具有相同的主鍵,否則您將違反由外鍵定義的參照完整性。

問題是你的Part_Number是主鍵和外鍵在同一時間。要在EFv4中允許這種映射,您必須使用Foreign Key association instead of Independent association。這裏是brief description how to create foreign key association in the designer。一旦你定義了參照約束,回到關聯的映射窗口並刪除映射。

+0

Ladislav,我更新了我的ItemA和ItemB表,表明Part_Number不是這些表中的主鍵(對此很抱歉)。所以據我瞭解ItemA/ItemB與WebItem的關係爲1到0.1。原因在於ItemA在WebItem中不存在,直到它被構建時,此時將只有1個匹配項。 ItemB也一樣。這有意義嗎?我會看看你的評論,看看它是否仍然適用。感謝您的回覆 – 2011-05-02 19:23:33

+0

它可能是有道理的,但在EF中是不可能的。任何一對一關係都基於FK的唯一性。這意味着FK必須是主鍵或唯一鍵。問題在於EF根本不支持唯一鍵,並且因爲一對一關係只能在共享主鍵上建模。 – 2011-05-02 19:36:23

+0

我明白了,我認爲這將是答案。在這種情況下將不得不走SP路線。感謝您的時間。 – 2011-05-02 19:38:37