Insight.Database支持映射一对多结果如果SQL有多个SELECT语句,一个用于父级,另一个用于子级。请参阅: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>
我担心查询与单个连接一样有效。
答案 0 :(得分:1)
看起来你想要返回一个像这样的记录集:
Beer=1, Glass=A
Beer=1, Glass=B
并将其转换为这些对象:
Beer {
ID=1
Glasses = {
Glass { ID=A }
Glass { ID=B }
}
}
洞察力需要将啤酒去重复,并将眼镜包裹在父母身上。
目前还没有支持这种情况,但将它添加为新类型的记录阅读器(然后将其绑定到接口实现)并不会太困难。
根据您的使用情况,返回两个记录集中的数据可能会也可能不会更好/更快。两个记录集可能会再次扫描索引,但它们可能在内存中,并且可能比复制每个子记录中的数据更快。找出答案的唯一方法是分析您的数据。
如果您发现仍需要在单个记录集中返回数据,请在github网站上打开功能请求,我们会考虑实施它。