2009-12-04 8 views
4

Je suis un moment difficile de comprendre pourquoi ce code ne parvient pasEntity Framework et test de charge

J'ai une méthode d'essai

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(); 
    } 

Voici le code pour CreateRepository

public IRepository<T> CreateRepository<T>() 
{ 
    return new Repository<T>(_currentContext); 
} 

Le test ci-dessus ne fonctionne pas sur un test de charge. Lorsque j'essaie de l'exécuter, il est indiqué System.Data.EntityException: le fournisseur sous-jacent a échoué sur Open. --->System.InvalidOperationException: La connexion n'a pas été fermée. L'état actuel de la connexion est en cours de connexion.

Je dispose du contexte et en crée un nouveau à chaque fois. Je ne comprends pas où je me trompe

+0

Nous aurons besoin de savoir ce que contient EFUnitOfWork.CreateInstance() pour vous aider. – jfar

+0

J'ai un problème similaire ... –

+0

Même problème pour moi aussi. – CountZero

Répondre

2

Votre code EFUnitOfWork.CreateInstance() est une méthode statique.

Lorsque 2 threads appellent cela en même temps, ils peuvent retrouver le même contexte. Ensuite, vous pourriez obtenir l'erreur que vous voyez.

Vous pouvez le réparer en le verrouillant de manière à ce qu'il ne soit appelé que par un fil à la fois. Mais le temps introduirait un goulot d'étranglement au niveau des performances.