我使用Dapper执行一个返回两个输出参数的存储过程。一次是xml数据类型,另一个是整数。我尝试在Output<T>
类型上使用DynamicParameters
方法。但是,当我使用它时,分配的值始终为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>
?
答案 0 :(得分:1)