2012-06-08 92 views
0

所以我有這個舊的系統的兩個相關的表,訂單和orderextras。訂單表的Id爲主鍵,客戶名稱爲標量屬性,orderextra_Id爲外鍵。 orderextra只有兩個屬性,Id作爲主鍵和一個名爲extrainfo的varchar。將兩個表結合到一個單一的實體類型

現在我剛剛開始閱讀EF 4.0 Recipes,並且在剛開始的時候,它演示了將兩個表合併成一個實體(基本上,我希望extrainfo出現在訂單實體上,而不是orderextra作爲一個實體)。但是,在這個例子中,兩個表共享相同的PK。當他們有單獨的PK並且其中一個表引用另一個表時可以這樣做嗎?

+0

如果你不需要寫入這個組合實體,而你的後端是SQL,那麼你可以在SQL中創建一個視圖並將視圖添加到你的實體中。 – JamieSee

+0

是的,如果我不需要回信的話,我會這麼做。 – bobblez

回答

0

試試這個:

modelBuilder.Entity<Order>() 
    .Map(m => 
    { 
     m.Properties(t => new { /* order columns */ }); 
     m.ToTable("order"); 
    }) 
    .Map(m => 
    { 
     m.Properties(t => new { /* orderextra columns */ }); 
     m.ToTable("orderextra"); 
    }); 
+0

哦,我想我應該更具體。我正在尋找一種方法來完成設計師的工作。我甚至不知道你說的這個模型構建器是什麼:)謝謝你的答案! – bobblez

+0

@bobblez'modelBuilder'是代碼優先的流利api的一部分。所以如果你使用這個設計器,這不會對你有所幫助。 –

+0

@bobblez我不知道所有文件的名稱,但根據我的經驗,GUI只是抽象這個文件,大衛正在談論修改。我並沒有太多搞砸它,但不得不出於各種原因(出於某種原因,我的一個翻譯函數在db修改後隨機獲得了第二個必需的參數)。我不會偏離它,你肯定會在某個時候觸及它,而且它非常簡單。 – evanmcdonnal

0

在設計上的實體之一,來自這兩個表添加你想要的列並轉到映射詳細信息窗口。

從那裏,你應該看到表 - >「映射到XXX表」。在這之下,您可以添加另一個表格和地圖列,以便您擁有多個表格,並將其添加到您想要的屬性中。

+0

是的,這是我嘗試過的,但是當我嘗試迭代context.Orders -collection時,我總是得到一個實體異常(其中根據我的嘗試而改變)。這個問題似乎與Id字段有關。具體來說,映射到orderextra表的Id的內容。 EF似乎抱怨不得不映射所有關鍵屬性,無論我試圖映射到它。 – bobblez

相關問題