再次感謝您發佈的所有精彩答案!如何從SQL中讀取父數據和子數據?
我在SQL中有兩個表。第一個定義了父項,並且有一個名爲ParentId的主鍵列。我也有一個子表,它有一個主鍵,一個外鍵爲'ParentId'。所以這兩張表格構成了一對單親 - 對許多孩子的關係。
問題是拉出父+子數據C#代碼的最有效方法是什麼?該數據讀入以下對象:
public class Parent
{
public int ParentId { get; set; }
public List<Child> Children { get; set; }
// ... many more properties ... //
}
public class Child
{
public int ChildId { get; set; }
public string Description { get; set; }
// ... many more properties ... //
}
如果我使用下面的查詢我會得到家長和孩子們一次,每個家長都會被重複多次,許多孩子有:
SELECT
p.ParentId as 'ParentId',
c.ChildId as 'ChildId',
-- other relevant fields --
FROM
Parents p
INNER JOIN
Children c
ON
p.ParentId = c.ParentId
使用這種方法,我必須找到所有獨特的父行,然後讀取所有的孩子。好處是我只能做1次到db。
這樣做的第二個版本是分別讀取所有家長:
SELECT * FROM Parents
,然後分別讀取所有的孩子:
SELECT * FROM Children
,並使用LINQ帶孩子合併所有的父母。這種方法使2次訪問數據庫。
第三個也是最後一個(也是效率最低的)方法是抓住所有的父母,並在構造每個父對象時,前往數據庫以獲取其所有孩子。這種方法需要n + 1個連接:對於所有父母來說都是1,對於每個父母來說,有n次到所有孩子的旅行。
任何建議如何做到這一點更容易?當然,我不能擺脫使用存儲過程,我不能使用LINQ2SQL或EF。你更喜歡數據表還是數據讀取器?如果是的話,如何使用方法1或2?
感謝, 馬丁
我顯然需要孩子這就是爲什麼我問的問題放在首位。 – bleepzter 2011-03-14 21:03:00