2010-10-11 81 views
2

我試圖創建一個1:使用實體框架(.NET 4.0)M關係,並正在以下錯誤:定義1到實體框架多對多關係

App_Code.Model.msl(36,6) : error 3007: Problem in mapping fragments 
starting at lines 6, 36:Column(s) [ProductId] are being mapped in 
both fragments to different conceptual side properties. 

我有什麼是產品表和功能表。這個想法是產品有很多特點。每個產品都有一個ProductId,並且這些Features具有一個ProductId外鍵。

現在的問題是外鍵在sql server中不存在,我不希望它。如果確實如此,那麼它全部自動地很好地工作。

在EDMX設計器中,我創建了一個從產品到特徵實體的關聯,然後將ProductFeature關聯的映射細節編輯爲基於Features表,我認爲它會使其工作。

任何想法?非常感謝。

+0

你爲什麼不想要的FK?忘記EF一秒鐘,這將如何從SQL Server的角度工作?您需要功能上的FK來了解它屬於哪個「唯一」產品記錄。如果你說你不想要這個FK,這聽起來像是多對多,在這種情況下,你需要一個聯結表(即ProductFeatures - 就像下面的答案一樣)。 – RPM1984 2010-10-11 23:36:07

+0

是否有任何特別的原因,您沒有使用外鍵?我明白這只是一個簡單的例子,但從你的描述來看,它應該是一個FK。 – 2010-10-11 23:40:56

+0

@ RPM1984 - 我不想對數據庫進行更改,因爲這是針對現有應用程序/數據庫的,而不是綠地的情況。 – Chris 2010-10-11 23:51:05

回答

0

這是一個M×N的關係。爲什麼?因爲某個功能可以分配給多種類型的產品。

你應該有一個表,產品屬性,像這樣:

ProductId FeatureId 
1   1 
1   2 
2   1 
2   2 
+0

嗨,這只是一個簡單的例子,學習的目的,在一個真實的應用程序,你是對的,它會像你描述,但在這種情況下,我試圖處理1:m關係。 – Chris 2010-10-11 23:33:17

0

找到一個解決辦法:刪除標酒店需要從功能實體「產品ID」:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/a71901fb-97ec-4072-949a-c0c66a9775b1

然而,在汽車 - 如果您在數據庫中設置外鍵,那麼EF會爲您提供生成的關係,例如'ParentId'字段,它們以標量字段存在於孩子中。

所以我還是有點困惑。

CNC中進一步幫助:

http://www.hanselman.com/blog/CreatingAnODataAPIForStackOverflowIncludingXMLAndJSONIn30Minutes.aspx

+0

可能與設計器生成的代碼/ xml有關。我從1.0版本開始就沒有使用過EF,但我記得通過直接編輯UI/Designer不支持的xml可以做很多事情。 – 2010-10-11 23:46:53

+0

感謝confusedgeek,也許我會直接粉筆寫這個VS. – Chris 2010-10-11 23:51:38