[英]Insight.Database One to Many Mapping from a JOIN using Auto Interface
如果SQL具有多個SELECT語句 (一個用於Parent,另一個用於子代),則Insight.Database支持映射一對多結果。 參見: https : //github.com/jonwagner/Insight.Database/wiki/Specifying-Result-Structures
CREATE PROC GetBeerAndPossibleGlasses AS
SELECT * FROM Beer
SELECT b.BeerID, g.* FROM Beer JOIN Glasses ON (...)
class Beer
{
public int ID;
public IList<Glass> Glasses;
}
var results = connection.Query("GetBeerAndPossibleGlasses", Parameters.Empty,
Query.Returns(Some<Beer>.Records)
.ThenChildren(Some<Glasses>.Records);
可以使用單個聯接查詢完成一對多映射嗎? 我相信Petapoco支持這一點。 (我正在使用自動接口實現,但是我想知道是否有任何方法可以實現它。)例如
CREATE PROC GetBeerAndPossibleGlasses AS
SELECT b.*, g.* FROM Beer JOIN Glasses ON (...)
我有一個相對復雜的查詢,我需要如上所述返回父級和子級。 如果我創建多個SELECT語句,但我的select語句如下所示,則可以使用:
SELECT * FROM Beer WHERE <Complex WHERE clause>
SELECT b.BeerID, g.* FROM Beer JOIN Glasses ON (...) <Complex WHERE clause>
我擔心查詢的效率與單個聯接一樣。
看起來您想像這樣返回一個記錄集:
Beer=1, Glass=A
Beer=1, Glass=B
並將其轉換為以下對象:
Beer {
ID=1
Glasses = {
Glass { ID=A }
Glass { ID=B }
}
}
有識之士將需要對啤酒進行重復數據刪除,然后將眼鏡包裝到父母手中。
目前尚不支持該方案,但是將其添加為一種新型的RecordReader(然后將其綁定到接口實現)並不是很難。
根據您的用例,在兩個記錄集中返回數據可能更好也可能不會更快。 兩個記錄集可以再次掃描索引,但是它們很可能在內存中,並且比在每個子記錄中復制數據要快。 找出問題的唯一方法是分析您的數據。
如果發現仍然需要在單個記錄集中返回數據,請在github站點上打開功能請求,我們將研究實現它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.