4

我很难理解为什么这段代码会失败

我有一个测试方法

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:底层提供程序在打开时失败。---> System.InvalidOperationException:连接未关闭。连接的当前状态是正在连接。

我每次都在处理上下文并创建一个新上下文。我不明白我哪里出错了

4

1 回答 1

2

您的代码EFUnitOfWork.CreateInstance()是静态方法。

当 2 个线程同时调用它时,它们可以返回相同的上下文。然后你会得到你看到的错误。

您可以通过锁定来修复它,这样它一次只能由一个线程调用。但是时间会引入性能瓶颈。

于 2011-07-19T10:14:27.650 回答