在dapper中调用查询多次后无法读取

时间:2017-08-27 08:45:30

标签: c# generics dapper

我在Helper课程中使用以下方法,我将其与Dapper一起使用:

Helper.cs:

public SqlMapper.GridReader MQueries(string spName, object dynamicParams)
{
  using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
  {
    conn.Open();

    return conn.QueryMultiple(spName, dynamicParams, commandType: CommandType.StoredProcedure);
  }
}

我从另一个名为DataAccess的类中调用上述方法:

DataAccess.cs:

public Member GetMemberDetails(Member member)
{
  var multi = Helper.MQueries("GetMemberDetails", member);
  var member = multi.Read<Member>().Single();
  var memberStatus = multi.Read<MemberStatus>().Single();
  var memberContact = multi.Read<MemberContact>().ToList();
  var memberFinancial = multi.Read<MemberFinancial>().ToList();

  member.MemberStatus = memberStatus;
  member.MemberContact = memberContact;
  member.MemberFinancial = memberFinancial;

  return member;
}

但是,multi variable有数据,但是一旦我想将它分开并映射到另一个变量,我就得到了一个名为cannot read while the reader is closed的异常。

我知道这是因为我使用的是using statement,所以在multi variable之后,连接会自动关闭,因此我无法读取任何内容..

我该如何解决这个问题?

您的回答非常感谢

由于

1 个答案:

答案 0 :(得分:0)

在您尝试阅读之前,连接已关闭。那不行。

我建议尝试这样:

using (var connection = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
using (var result = connection.QueryMultiple("GetMemberDetails", commandType: CommandType.StoredProcedure))
{
    //... Consume
}