Effort.Exceptions.EffortException: il database non è stato inizializzato - dopo l'aggiornamento non impegnato?

c# effort entity-framework entity-framework-6

Domanda

Perché si verifica questa eccezione? è un insetto?

Sto utilizzando Effort, la libreria di test EF per creare un'istanza di memoria del mio database e imbattersi in questo interessante scenario:

  1. Apri DbContext1
  2. Aggiungi oggetto alla Table (non salvare)
  3. Chiudi DbContext1
  4. Apri DbContext2
  5. Contare gli elementi nella Table

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

Tuttavia, se DbContext1 un conteggio (passaggio 5) anche in DbContext1 il conteggio in DbContext2 non fallisce?

Codice completo :

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

Eccezione completa:

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

Risposta popolare

Ho preso il consiglio menzionato nel messaggio di eccezione e ho aggiunto la seguente riga al mio test all'interno dell'istruzione using

    db.Database.CreateIfNotExists();

e quello ha funzionato per me.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché