在 dapper 中调用多个查询后无法读取
Failed to read after called query multiple in dapper
我在 Helper
class 中有以下方法,我将它与 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
:
的 class 调用上述方法
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
之后,连接自动关闭,所以我什么都看不到..
我该如何解决这个问题?
非常感谢您的回答
谢谢
在您尝试读取连接之前,连接即将关闭。那不行。
我建议这样尝试:
using (var connection = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
using (var result = connection.QueryMultiple("GetMemberDetails", commandType: CommandType.StoredProcedure))
{
//... Consume
}
您可以在 Helper.MQueries()
中创建一个委托 Func<SqlMapper.GridReader, Task<T>>
参数,然后将所有 .read()
逻辑放入 func<>
。
我在 Helper
class 中有以下方法,我将它与 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
之后,连接自动关闭,所以我什么都看不到..
我该如何解决这个问题?
非常感谢您的回答
谢谢
在您尝试读取连接之前,连接即将关闭。那不行。
我建议这样尝试:
using (var connection = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
using (var result = connection.QueryMultiple("GetMemberDetails", commandType: CommandType.StoredProcedure))
{
//... Consume
}
您可以在 Helper.MQueries()
中创建一个委托 Func<SqlMapper.GridReader, Task<T>>
参数,然后将所有 .read()
逻辑放入 func<>
。