我有以下SQL表:如何針對遞歸查詢優化LINQ-to-SQL?
ObjectTable
--------------------------------------------------
| ID | Name | Order | ParentID |
| int PK | nvarchar(50) | int | int FK |
ObjectTable.ParentID
是一個不同的對象記錄的ID的關係可爲空場。 LINQ到SQL生成看起來像一個類:
public class DbObject{
int ID { get; set; }
string Name { get; set; }
int Order { get; set; }
int? ParentID { get; set; }
DbObject Parent { get; set; }
EntitySet<DbObject> ChildObjects { get; set; }
}
當我打開一個DbObject
情況下,我需要能夠以遞歸訪問的子對象,這樣我就可以將數據寫入到一個層次JSON對象。
我會在每次通過
DbObject.ChildObjects
訪問元素時執行單獨的查詢嗎?由於數據庫事務處理時間最長,似乎這是加載遞歸層次結構的非常低效的方式。用LINQ-to-SQL和/或EF執行遞歸查詢的最佳做法是什麼?
LINQ-to-SQL與 Common Table Expressions集成嗎?我發現Common Table Expression (CTE) in linq-to-sql?
您是否有能力更改數據模型?如果沒有,那麼我認爲你需要走下你提到的其他問題中提到的sql字符串執行路徑。 –
@chrissainty,我可以改變數據模型。你是說沒有適合分層數據模型的情況? – smartcaveman
不是說這是不合適的。只是它不適用於標準的LINQ查詢。因此,您可以更改模型以使其成爲單個LINQ查詢,也可以執行sproc/text查詢。取決於你喜歡哪種方式。 –