由于代码重构而出现了问题,在这种情况下最好的解决方案是什么?
问题是 DbConnection 已从本地方法变量重构为类变量。该应用程序是多线程的。似乎问题在于 DbConnection 对象在它是成员变量时被共享。什么是最好的解决方案?将其保留为本地方法变量?
public IDataReader Execute(CommandBehavior behavior, string[] parameterNames, object[] arguments)
{
DbConnection conn = null;
try
{
conn = Connection.CreateConnection();
DbCommand cmd = conn.CreateCommand();
cmd.CommandText = StoredProcedureName;
cmd.CommandType = CommandType.StoredProcedure;
// ..................................................
// Perform the call.
return DataCachingContext.SetCachedData(call, cmd.ExecuteReader(behavior));
}
catch (Exception ex)
{
//..........................
}
finally
{
//
}
}
只是为了澄清,这是导致问题的版本。除了运行时异常,索引到 ResultSets 的问题,这很可能是由于连接被覆盖。
DbConnection _conn = null;
public IDataReader Execute(CommandBehavior behavior, string[] parameterNames, object[] arguments)
{
try
{
_conn = Connection.CreateConnection();
DbCommand cmd = _conn.CreateCommand();
cmd.CommandText = StoredProcedureName;
cmd.CommandType = CommandType.StoredProcedure;
// ..................................................
// Perform the call.
return DataCachingContext.SetCachedData(call, cmd.ExecuteReader(behavior));
}
catch (Exception ex)
{
//..........................
}
finally
{
//
}
}
经过更多调查,看起来 DbConnection 变量已成为一个类变量以启用单元测试。当它是局部变量时,无法测试它的值。正在测试 DbConnection 的状态