Entity Framework и нагрузочное тестирование - PullRequest
4 голосов
/ 04 декабря 2009

Мне трудно понять, почему этот код не работает

У меня есть метод испытания

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: соединение не было закрыто. Текущее состояние соединения - это соединение.

Я избавляюсь от контекста и создаю новый каждый раз. Я не понимаю, где я иду не так

1 Ответ

2 голосов
/ 19 июля 2011

Ваш код EFUnitOfWork.CreateInstance() - статический метод.

Когда 2 потока вызывают это одновременно, они могут возвращать один и тот же контекст. Тогда вы можете получить ошибку, которую видите.

Вы можете исправить это, заблокировав таким образом, чтобы он вызывался только одним потоком за раз. Но время создало бы узкое место в производительности.

...