首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamicParameters.Output<T>不会将输出映射到模型

DynamicParameters.Output<T>不会将输出映射到模型
EN

Stack Overflow用户
提问于 2016-10-07 03:19:45
回答 1查看 3.5K关注 0票数 2

我正在使用Dapper执行一个返回两个输出参数的存储过程。一个是xml数据类型,另一个是整数。我尝试在DynamicParameters类型上使用Output<T>方法。但是,当我使用它时,赋值始终为default(T),因此在本例中TotalNoOfUsers为0。

这是我正在开发的示例模型。

代码语言:javascript
复制
public class Foo
{
    public string Xml { get; set; }

    public int NumberOfUsers { get; set; }
}

以下是我为演示该行为而编写的单元测试。

代码语言:javascript
复制
[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>方法,它将返回预期的输出。

代码语言:javascript
复制
[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>

EN

回答 1

Stack Overflow用户

发布于 2016-10-08 10:26:17

查看下面的Dapper issue,也修复了合并的here。还要检查Marc对另一个查询here的响应

public DynamicParameters(object template);

发布,你当然需要告诉ParameterDirection在代码中已经完成了,否则它会默认认为所有东西都是InputParameter,并且仍然会导致错误。

由于您没有传递模板,这就是为什么输出无法映射到正确的值,因此输出结果为0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39904049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档