我正在使用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>?
https://stackoverflow.com/questions/39904049
复制相似问题