2013-10-10 57 views
2

出於性能考慮,我們必須使用DbSet<T>.SqlQuery從數據庫檢索實體。但是這個實體是幾種繼承類型的基本類型。 使用EF DbSet與Linq,當我們查詢它時,EF instanciates正確的類型,而我們查詢基類型。這非常感謝!實體框架 - 使用DBSet讀取TPT數據<T> .SqlQuery

一個例子:

Base type : TreeItem 
Derived types : Docs, Folder, Files 

我們創建其他查詢TreeITem

from item in DbCtxt.TreeItem 
where <predicate> 
select item: 

因此,我們得到不同對象的列表,其中一些是TreeItemDocsFiles類型...

但是現在我們想要使用我們自己的SQL查詢進行查詢,並且我們沒有實現獲取繼承類型但只有TreeItem

你知道我們該怎麼做到嗎?

感謝 ++ 魯

回答

0

MSDN文檔上SqlQery它說:

返回的實體是一個派生類型的總是這一套的類型和永遠。如果查詢的表可能包含其他實體類型的數據,則必須正確編寫SQL查詢以確保只返回正確類型的實體。

這意味着你只能查詢派生類型分開,像

context.Set<Folder>() 
     .SqlQuery("SELECT * FROM TreeItem WHERE Discriminator = 'folder'") 

如果這意味着你需要執行三個查詢可能擊敗獲得最佳性能的目的。

+0

感謝您的回答,我沒有看到對文檔的評論。這是一個壞消息,但我們會嘗試解決。 – LudoGo