Entity Framework и нагрузочное тестирование

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

у меня есть тестовый метод

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

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


person Nihilist    schedule 04.12.2009    source источник
comment
Нам нужно знать, что находится внутри EFUnitOfWork.CreateInstance(), чтобы чем-то помочь.   -  person John Farrell    schedule 06.12.2009
comment
У меня аналогичная проблема...   -  person Kyle    schedule 12.08.2010
comment
если вы создали экземпляр с менеджером pertheadlifetime, он не будет работать. С Unity2 вы можете внедрить объект, который хотите использовать. Меня устраивает. Я не уверен, что мы сможем сделать то же самое в более ранней версии.   -  person Nihilist    schedule 17.02.2011


Ответы (1)


Ваш код EFUnitOfWork.CreateInstance() является статическим методом.

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

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

person Shiraz Bhaiji    schedule 19.07.2011