将Dapper查询映射到对象集合(它本身有几个集合)

Jay*_*ens 5 c# dapper multi-mapping

我想执行单个查询(或具有多个结果集的存储过程).我知道如何使用Dapper进行多重映射,但我无法对如何将两个集合映射到同一个父集合进行排序.基本上,给定此对象定义...

class ParentObject
{
    string Name { get; set; }
    ICollection<ChildObjectOne> ChildSetOne {get;set;}
    ICollection<ChildObjectTwo> ChildSetTwo { get; set; }
}

class ChildObjectOne
{
    string Name { get; set; }
}

class ChildObjectTwo
{
    int id { get; set; }
    string LocationName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够运行以某种方式产生的Dapper查询:

IQueryable<ParentObject> result = cnn.Query(
          // Some really awesome dapper syntax goes here
);
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 7

不确定你是否不想使用MultiMapping,但这里是它如何适用于你的情况.据我所知并在SO上阅读,用简单的方法绘制深度嵌套对象图是不可能的Query.

 static void Main(string[] args)
        {
            var sqlParent = "SELECT parentId as Id FROM ParentTable WHERE parentId=1;";
            var sqlChildOneSet = "SELECT Name FROM ChildOneTable;"; // Add an appropriate WHERE
            var sqlChildTwoSet = "SELECT Id, LocationName FROM ChildTwoTable;"; // Add an appropriate WHERE

            var conn = GetConnection() // whatever you're getting connections with
            using (conn)
            {
                conn.Open();
                using (var multi = conn.QueryMultiple(sqlParent + sqlChildOneSet + sqlChildTwoSet))
                {
                    var parent = multi.Read<ParentObject>().First();
                    parent.ChildSetOne = multi.Read<ChildOne>().ToList();
                    parent.ChildSetTwo = multi.Read<ChildTwo>().ToList();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

嵌套对象和小巧的类似问题:

https://stackoverflow.com/search?q=nested+objects+%2B+dapper