【发布时间】:2016-10-06 19:19:45
【问题描述】:
我正在使用 Dapper 执行一个返回两个输出参数的存储过程。一个是 xml 数据类型,另一个是整数。我正在尝试在DynamicParameters 类型上使用Output<T> 方法。但是,当我使用它时,分配的值始终是default(T),所以在这个例子中TotalNoOfUsers 是0。
这是我正在使用的示例模型。
public class Foo
{
public string Xml { get; set; }
public int NumberOfUsers { get; set; }
}
以下是我为演示该行为而编写的单元测试。
[TestMethod]
public async Task Test()
{
var foo = new Foo();
var connection = new SqlConnection(this.connectionString);
await connection.OpenAsync();
var parameters = new DynamicParameters();
parameters.Add("ApplicationInstanceRoleId", this.roleId);
parameters.Add("TotalNoOfUsers", 0, DbType.Int32, ParameterDirection.Output);
parameters.Output(foo, output => output.NumberOfUsers);
await connection.ExecuteAsync(
"USP_Get_UsersAndAccessControlXML4ApplicationRole",
parameters,
commandType: CommandType.StoredProcedure);
Assert.AreNotEqual(0, foo.NumberOfUsers);
}
但是我可以使用Get<T> 方法,它会给我返回预期的输出。
[TestMethod]
public async Task Test()
{
var foo = new Foo();
var connection = new SqlConnection(this.connectionString);
await connection.OpenAsync();
var parameters = new DynamicParameters();
parameters.Add("ApplicationInstanceRoleId", this.roleId);
parameters.Add("TotalNoOfUsers", 0, DbType.Int32, ParameterDirection.Output);
await connection.ExecuteAsync(
"USP_Get_UsersAndAccessControlXML4ApplicationRole",
parameters,
commandType: CommandType.StoredProcedure);
foo.NumberOfUsers = parameters.Get<int>("TotalNoOfUsers");
Assert.AreNotEqual(0, foo.NumberOfUsers);
}
我是否错误地使用了Output<T>?
【问题讨论】:
标签: dapper