【发布时间】:2019-09-12 15:29:01
【问题描述】:
我一直在我的一个项目中使用 dapper,在一种情况下,我想返回一个原始数据类型的元组。 (只有一行)由于我使用了 dapper,我真的很想在这种情况下也使用 dapper。我检查了这些链接,但找不到解决方案
Can I map a result to Tuple in Dapper?
Dapper multiple objects from one row
Using Dapper to map more than 5 types
这就是我的代码的样子,
Using(_dbTransaction = _dbConnection.BeginTransaction()){
var command = new CommandDefinition(
"SELECT ID1,ID2 " +
"FROM table " +
"WHERE ID0 = @ID",
new {ID = 34},_dbTransaction); //34 is just a number
var dataSet = _dbConnection.QueryFirst<Tuple<uint, decimal>>(command);
//assign the retrieved values to properties of orderItem (orderItem is a passed object as a parameter)
orderItem.Id = dataSet.item1;
orderItem.ContainerPrice = dataSet.item2;
}
但这会产生异常
{"System.Tuple`2[[System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, 需要一个无参数的默认构造函数或一个匹配的签名(System.UInt32 Id, System.Decimal ContainerPrice), PublicKeyToken=b77a5c561934e089],[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 物化"}
如果可以提出方法或指出我哪里出错了,那将是一个很大的帮助
【问题讨论】:
-
从抛出的错误代码...听起来您需要提供默认方法签名。然后该方法的参数化版本应该可以工作......给定您的逻辑检查
-
@Chef_Code 你的意思是默认方法签名吗?是 QueryFirstOrDefault() 吗?
-
这是我首先要消除的。提供默认签名...然后从那里开始。是的,
QueryFirstOrDefault<>()或者你使用的方法QueryFirst<Tuple<uint, decimal>>()没有参数。你仍然可以使用你的重载版本......默认的只是需要可用 -
将
var悬停在command前面...编译器是否认为command是Tuple<uint, decimal>>? -
是的,dataSet(var) 是一个元组
。而且我也尝试了 QueryFirstOrDefault() 方法,但它也不能正常工作