首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dapper映射5个以上的类型

使用Dapper映射5个以上的类型
EN

Stack Overflow用户
提问于 2012-04-18 12:01:46
回答 3查看 7.5K关注 0票数 18

我目前正在构建一个将12个表连接在一起的SELECT查询。我一直在使用Dapper来处理我的所有其他查询,它工作得很好。问题是,泛型方法只有五个泛型参数。

我之前已经修改了代码,以支持多达6个级别的另一个查询,但现在我真的认为我不应该再修改6个级别的泛型。

有没有办法向dapper传递一个类型数组,然后它以对象数组的形式返回结果,如果有必要,我可以手动转换对象数组?

我也可能用错误的方式来处理这个问题!任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-25 18:18:35

在我工作的一个项目中,我看到了类似这样的东西,可以映射超过7种类型。我们使用Dapper 1.38:

代码语言:javascript
复制
connection.Query<TypeOfYourResult>
(
   queryString,
   new[]
   {
      typeof(TypeOfArgument1),
      typeof(TypeOfArgument2),
      ...,
      typeof(TypeOfArgumentN)
   },
   objects =>
   {
      TypeOfArgument1 arg1 = objects[0] as TypeOfArgument1;
      TypeOfArgument2 arg2 = objects[1] as TypeOfArgument2;
      ...
      TypeOfArgumentN argN = objects[N] as TypeOfArgumentN;

     // do your processing here, e.g. arg1.SomeField = arg2, etc.
     // also initialize your result

     var result = new TypeOfYourResult(...)

     return result;
   },
   parameters,
   splitOn: "arg1_ID,arg2_ID, ... ,argN_ID"
);

queryString是不言自明的。Dapper参数说明splitOn应该如何拆分SELECT语句中的列,以便所有内容都可以正确地映射到对象you can read about it here

票数 28
EN

Stack Overflow用户

发布于 2012-04-18 13:29:08

您可以使用动态查询,然后将其映射。像这样的东西

代码语言:javascript
复制
var result = conn.Query<dynamic>(query).Select(x => new Tuple<Type1, Type2, Type3, Type4, Type5>( 
// type initialization here 
    new Type1(x.Property1,x.Property2),
    new Type2(x.Property3,x.Property4),
    new Type3(x.Property5,x.Property6) etc....));

编辑:对于相当大的结果集,另一种选择可能是使用多个查询,然后使用Grid Reader。这可能对你有用。

下面是衣冠楚楚时代的例子:

代码语言:javascript
复制
var sql = 
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var customer = multi.Read<Customer>().Single();
   var orders = multi.Read<Order>().ToList();
   var returns = multi.Read<Return>().ToList();
   ...
} 
票数 4
EN

Stack Overflow用户

发布于 2013-06-11 01:58:02

这个问题很久以前就得到了回答,但我想在这里补充我的两点意见。与其手动修改Dapper的源代码,为什么不使用这些字段创建一个poco类,并像使用表一样使用查询?

映射将工作得很好,我知道这也是一个痛苦的类定义,但似乎比处理后来的Dapper的更新更容易。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10202584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档