实体框架 – 实体框架和负载测试

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

我有一个测试方法

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上失败. —> System.InvalidOperationException:未关闭连接.连接的当前状态是连接.

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

最佳答案 您的代码EFUnitOfWork.CreateInstance()是一个静态方法.

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

您可以通过锁定来修复它,使其一次只能被一个线程调用.但时间会带来性能瓶颈.

点赞