這是一個有趣的問題。假設我們在數據庫中有相關的表格,例如Instrument和Currency。工具表具有映射到貨幣表中條目的currency_id字段。在LINQ土地有什麼更好的辦法:Linq與數據庫視圖
一)在DataContext的創建儀器和貨幣的實體,然後創建協會或簡單地用加入LINQ查詢或
二)建立在連接儀器數據庫中的視圖和貨幣(從而將currency_id解析爲貨幣代碼)並將其用作Linq上下文中的實體?
這是一個有趣的問題。假設我們在數據庫中有相關的表格,例如Instrument和Currency。工具表具有映射到貨幣表中條目的currency_id字段。在LINQ土地有什麼更好的辦法:Linq與數據庫視圖
一)在DataContext的創建儀器和貨幣的實體,然後創建協會或簡單地用加入LINQ查詢或
二)建立在連接儀器數據庫中的視圖和貨幣(從而將currency_id解析爲貨幣代碼)並將其用作Linq上下文中的實體?
你會不會獨立使用它們?如果是這樣,你將需要爲每個將獨立使用的實體。我懷疑你會獨立使用貨幣(比如下拉菜單允許你在創建一個工具時選擇一種貨幣)。既然如此,我認爲將它們分開並建立聯繫會更容易。
隨着ORM現在抽象數據訪問邏輯,視圖的特定功能不再需要。因爲這是它的一部分功能,所以最好將它留給ORM。
但是,視圖對於簡化存儲過程代碼甚至創建有用的索引仍然有用。
如果您在樂器中加載並稍後使用貨幣屬性加載相關貨幣,則會出現兩個查詢。
如果使用聯接發出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;
但性能怎麼樣,如果我不使用視圖LINQ會做更多的選擇每行? – Sasha 2009-01-05 19:07:55
不一定LINQ表達式通常會解析爲將在SQL中執行所需連接的單個選擇。 – AnthonyWJones 2009-01-05 19:10:28