有没有办法在Dapper中一起使用MultiMapping和QueryMultiple?

时间:2012-04-25 15:48:45

标签: dapper

我需要一起运行一些查询,我可以使用 QueryMultiple 功能执行此操作。

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

有谁知道实现这一目标的方法?

2 个答案:

答案 0 :(得分:10)

我认为这是你正在寻找的东西,但如果没有你想要执行的查询的例子很难说。

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.
}

基本上Read的{​​{1}}方法与SqlMapper.GridReader扩展方法类似。您只能获得带有两个以上泛型类型的重载之一的Query参数。

答案 1 :(得分:1)

从另一个帖子中获取的快速示例:how-to-get-values-for-child-objects

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();
} 

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