【问题标题】:Dapper-dot-net "no column name"Dapper-dot-net “没有列名”
【发布时间】:2011-09-06 21:27:21
【问题描述】:

我的结果集可能如下所示:

ID    (no column name)  anotherID
----  ----------------  ----------
1        super            3
1        super            4
3        duper            6
4        really           7
4        really           8

我有 2 个问题:

第一:如何在没有名称的列中使用 dapper?

第二:我想要一个父子关系,这样我得到 3 个对象,每个对象都有一个另一个 ID 的列表,例如:

public class MyObject
{
   public int ID
   public string Name
   public int[] Children
}

【问题讨论】:

标签: dapper


【解决方案1】:

好吧,dapper 不支持未命名的列。我从来没有真正看到他们的原因。

我想我们可以建立以下支持:

class Foo { [ColumnNumber(1)] public string Name {get;set;} }

问题在于它引入了一种我非常不喜欢的非常脆弱的查询方法,将指令传递给Query 同样笨拙。

但是,如果您愿意改变获取结果的方式,您可以解决这个问题。

var grid = QueryMultiple(@"set nocount on 
declare @t table(Id int, Name nvarchar(max), AnotherId int)

insert @t
exec proc

set nocount off 
select Id, Name from @t
select Id, AnotherId from @t
");

然后使用这里的技术进行多重映射:Multi-Mapper to create object hierarchy

【讨论】:

  • 也许更简洁的方法是传递一个映射...本质上为列命名...这样您就可以将其指定为查询的额外参数,以便您不要混淆数据对象定义。特别是如果您将数据对象重用于多个查询。或者,您也可以允许将名称重新映射到其他名称... IE... 基础数据(存储过程)返回一堆您不希望在数据对象中使用的匈牙利符号。
  • 我和 jsobo 在同一条船上,我有一个无法控制的存储过程。但需要将存储过程与多个未命名的列一起用于报告应用程序。我尝试调整查询,但收到 SQL 错误“无法嵌套 INSERT EXEC 语句”。 .理想情况下,如果我可以参考可以解决我的问题的列号。如何修改 drapper 以添加对以下内容的支持:class Foo { [ColumnNumber(1)] public string Name {get;set;} }
猜你喜欢
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多