Essayer d'effectuer des tests unitaires avec le code EF 4.1 en premier. J'ai mon live db (SQL Server) et mon DB unité de test (Sql CE). Après avoir combattu (et perdre) avec EF, Sql CE 4.0 et de transactions j'ai décidé le moyen le plus simple d'exécuter mon test était de:Entity Framework 4.1 «Code First» SetInitializer ne pas être appelé à nouveau après Database.Delete
- Créer Db
- Test de
- Supprimer Db
- Rincer et répéter
J'ai mon [Setup] et fonctions [teardown]:
[SetUp]
public void Init()
{
System.Data.Entity.Database.SetInitializer(new MyTestContextInitializer());
_dbContext = ContainerFactory.Container.GetInstance<IContext>();
_testConnection = _dbContext.ConnectionString;
}
[TearDown]
public void Cleanup()
{
_dbContext.Dispose();
System.Data.Entity.Database.Delete(_testConnection);
}
Le problème est que System.Data.Entity.Database.SetInitializer n'appelle pas MyTestContextInitializer après le premier test.
D'où le 2ème test échoue ensuite avec:
System.Data.EntityException: Le fournisseur sous-jacent a échoué sur Ouvrir.
----> System.Data.SqlServerCe.SqlCeException : Le fichier de base de données est introuvable. Vérifiez le chemin de la base de données
TIA pour tous les pointeurs
Belle, cela m'a aidé à trier ce que je pensais était le verrouillage du fichier DB (CE 4) entre les appareils de test. +1 :) –
Brillant! J'ai eu exactement ce problème, avec EF5 pas moins, et a été coincé sur un moment. Ceci l'a arrangé pour moi, merci. –