2009-01-05 81 views
2

這是一個有趣的問題。假設我們在數據庫中有相關的表格,例如Instrument和Currency。工具表具有映射到貨幣表中條目的currency_id字段。在LINQ土地有什麼更好的辦法:Linq與數據庫視圖

一)在DataContext的創建儀器和貨幣的實體,然後創建協會或簡單地用加入LINQ查詢或

二)建立在連接儀器數據庫中的視圖和貨幣(從而將currency_id解析爲貨幣代碼)並將其用作Linq上下文中的實體?

回答

1

你會不會獨立使用它們?如果是這樣,你將需要爲每個將獨立使用的實體。我懷疑你會獨立使用貨幣(比如下拉菜單允許你在創建一個工具時選擇一種貨幣)。既然如此,我認爲將它們分開並建立聯繫會更容易。

+0

但性能怎麼樣,如果我不使用視圖LINQ會做更多的選擇每行? – Sasha 2009-01-05 19:07:55

+0

不一定LINQ表達式通常會解析爲將在SQL中執行所需連接的單個選擇。 – AnthonyWJones 2009-01-05 19:10:28

0

隨着ORM現在抽象數據訪問邏輯,視圖的特定功能不再需要。因爲這是它的一部分功能,所以最好將它留給ORM。

但是,視圖對於簡化存儲過程代碼甚至創建有用的索引仍然有用。

0
  • 如果您在樂器中加載並稍後使用貨幣屬性加載相關貨幣,則會出現兩個查詢。

  • 如果使用聯接發出linq查詢,linq會通過聯接將其轉換爲sql,並且您可以一次獲取所有數據。

  • 如果您設置了DataLoadOptions,您可以在一個查詢中獲取所有數據,而無需編寫聯接。

http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.loadwith.aspx

DataLoadOptions dlo = new DataLoadOptions(); 
dlo.LoadWith<Instrument>(i => i.Currencies) 
myDataContext.LoadOptions = dlo;