在Dapper中是否有一种同时使用MultiMapping和QueryMultiple的方法?

9

我有几个查询需要一起运行,可以使用QueryMultiple功能来实现。

但在这种情况下,我无法找到如何使用MultiMapping

是否有人知道实现这一点的方法?

2个回答

15

我认为这就是你在寻找的内容,尽管没有你要执行的查询示例,很难确定。

var sql = @"Select * 
            From Parent 
            Left Join Child on Child.ParentID = Parent.ParentID 
            Where Parent.ParentID = @id
            ... more queries";

using(var reader = connection.QueryMultiple(sql, new {id=selectedId}))
{
    var stuff = reader.Read<Parent, Child, Parent>(
        (p,c)=> 
        {
            p.Child = c;
            return p;
        }, splitOn: "ChildId").Single();
    // Continue to read from the other queries in your sql.
}

实际上,SqlMapper.GridReaderRead 方法类似于 Query 扩展方法。只有在使用超过两个泛型类型的重载之一时,才会使用 splitOn 参数。


1

这是一个从另一个线程中获取的快速示例:如何为子对象获取值

var sql = 
@"
select * from PROFILES where profileId= @id
select * from PROFILEIMAGES where OWNER_PROFILESIDFK = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var profile = multi.Read<Models.PROFILE>().Single();
   profile.ProfileImages = multi.Read<Model.PROFILEIMAGES>().ToList();
} 

每个查询都返回一组对象,然后可以将这些对象映射到您的实体。

谢谢Alex。但我正在寻找一种使用多映射功能的方法。 - Carlos Mendes
你能提供一个你正在尝试做的例子吗? - Alex
1
基本上,我在SQL中将一些字段非规范化存储(例如:一个DTags字段,其中我将所有标签用“;”分隔等)。当我使用QueryMultiple(Read方法)时,没有像MultiMapping查询中使用“split”参数的选项。 - Carlos Mendes
如果您需要返回一个配置文件列表怎么办?Single()不会返回List<T>。 - johnny
@johnny 请参考juharr的多映射示例。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接