2009-02-23 101 views
7

這似乎是一個常見的情況,但無論出於何種原因,我都被EF的弱編輯所困擾。如何在實體框架中手動添加複合關聯?

我有兩個表,就像這樣:現在

Table1 
(
Column1 int, PK 
Column2 int, PK 
) 

Table2 
(
Column1 int, PK, FK 
Column2 int, PK, FK 
Column3 int, PK 
) 

,數據庫(在我們控制的)不具有外鍵約束。在這個例子中,Table2應該有一個引用Table1(Column1,Column2)的外鍵約束。換句話說,Table2的前兩列引用Table1中的主鍵。這是任何普通數據庫中的日常問題。

在其他框架,如LLBLGenPro,我們可以手動添加關係的方式非常簡單。但是,我們無法知道如何在EF的編輯器中實現這一點。這個「映射詳細信息」窗口很糟糕,非直觀。到目前爲止,我們已經設法選擇了映射中的各種表格,但似乎總是要關聯所有列。

任何想法或參考?

+0

你有沒有找到一個答案嗎?我處於同樣的情況,克雷格的解決方案將永遠存在,並且實際上阻止我們使用EF。 – Vaccano 2009-05-18 19:49:58

回答

1
  1. 創建具有相同列但正確FK的「臨時」表。如果您不能更改「真實」的數據庫,請使用數據庫的備份。不要打擾沒有FKs映射表。如果您使用新模型,這可能是最容易的,因爲設計器中的刪除操作不會刪除存儲映射。
  2. 用嚮導映射它們。
  3. 打開EDMX爲XML(而不是在設計師)
  4. 搜索和替換表名,使用你真的想要映射表。
  5. 刪除「臨時」表。

一般建議:在做非標準事情時手動編輯EDMX。沒有FKs =非標準。 GUI設計器僅處理某些情況。

+1

謝謝你的回覆。這聽起來非常蹩腳。這不僅是FK的情況,它會使這一點變得糟糕。還有其他人們喜歡添加到ORM圖層的自定義映射實例。這對EF來說看起來不太好。 – 2009-02-24 14:47:35

7

假設你有兩個實體。

  1. 右鍵單擊Table1實體標題並選擇添加關聯。
  2. 從右手邊選擇Table2。 (在此嚮導中設置任何其他屬性)
  3. 選擇新創建的關聯並編輯映射。 (應該已經被選中)
  4. 在映射詳細信息窗口中,選擇表2

這應該是它。

0
  1. 右鍵單擊Table1實體標題並選擇添加關聯。
  2. 從右手邊選擇Table2。 (設置在此嚮導任何其他屬性)
  3. 雙擊新創建的關聯和設置屬性