Effort.Exceptions.EffortException: La base de données n'a pas été initialisée - après une mise à jour non validée?

c# effort entity-framework entity-framework-6

Question

Pourquoi cette exception se produit-elle? Est-ce un bug?

J'utilise Effort, la bibliothèque de tests EF, pour créer une instance en mémoire de ma base de données et exécuter ce scénario intéressant:

  1. Ouvrir DbContext1
  2. Ajouter un élément à la Table (ne pas enregistrer)
  3. Fermer DbContext1
  4. Ouvrir DbContext2
  5. Compter les éléments dans le Table

Effort.Exceptions.EffortException : Database has not been initialized.

Cependant, si DbContext1 un compte (étape 5) également dans DbContext1 le compte dans DbContext2 n'échoue pas?

Code complet :

public void TestEF()
{
   var factory = new InMemoryMyApplicationDbContextFactory();

   using (var db = factory.CreateDbContext())
   {
      //uncomment this line to prevent exception - why????
      //db.Orders.Count();

      db.Orders.Add(new Order{ Id = Guid.NewGuid() }); 

      // intentionally do not call db.SaveChanges()
   }

   using (var db = factory.CreateDbContext())
   {
      // throws an exception if no read was performed above
      db.Orders.Count();
   }    
}    

Exception complète:

public void TestEF()
{
   var factory = new InMemoryMyApplicationDbContextFactory();

   using (var db = factory.CreateDbContext())
   {
      //uncomment this line to prevent exception - why????
      //db.Orders.Count();

      db.Orders.Add(new Order{ Id = Guid.NewGuid() }); 

      // intentionally do not call db.SaveChanges()
   }

   using (var db = factory.CreateDbContext())
   {
      // throws an exception if no read was performed above
      db.Orders.Count();
   }    
}    

Réponse populaire

J'ai pris le conseil mentionné dans le message d'exception et ajouté la ligne suivante à mon test dans l'instruction using

    db.Database.CreateIfNotExists();

et cela a fonctionné pour moi.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi