我很难理解为什么这段代码失败
我有一个测试方法
IUnitOfWork unitofwork = EFUnitOfWork.CreateInstance();
IRepository<InformationRequest> informationRequestRepository = unitofwork.CreateRepository<InformationRequest>();
IEnumerable<InformationRequest> requests = informationRequestRepository.ToList();
unitofwork.Dispose();
EFUnityOfWork.CreateInstance calls the EFUnitOfwork Constructor
public EFUnitOfWork()
{
_currentContext = new MyDataContext();
}
以下是CreateRepository
的代码public IRepository<T> CreateRepository<T>()
{
return new Repository<T>(_currentContext);
}
上述测试不适用于负载测试。当我尝试运行它时,它说 System.Data.EntityException:基础提供程序在Open上失败。 ---&GT; System.InvalidOperationException:未关闭连接。连接的当前状态是连接。
我每次都处理上下文并创建一个新的上下文。我不明白我哪里出错了
答案 0 :(得分:2)
您的代码EFUnitOfWork.CreateInstance()
是一种静态方法。
当2个线程同时调用它时,它们可以返回相同的上下文。然后你就可以得到你看到的错误。
您可以通过锁定来修复它,使其一次只能被一个线程调用。但时间会带来性能瓶颈。