Effort.Exceptions.EffortException: Datenbank wurde nicht initialisiert - nach nicht festgeschriebenem Update?


Frage

Warum tritt diese Ausnahme auf? Ist das ein Fehler?

Ich verwende Effort, die EF-Testbibliothek, um eine In-Memory-Instanz meiner Datenbank zu erstellen und führe dieses interessante Szenario durch:

  1. Öffne DbContext1
  2. Artikel zu Table (nicht speichern)
  3. Schließen Sie DbContext1
  4. Öffne DbContext2
  5. Zählen Sie Gegenstände in der Table

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

Wenn ich jedoch eine Zählung (Schritt 5) auch in DbContext1 DbContext2 , scheitert der Count in DbContext2 nicht?

Vollständiger Code :

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

Vollständige Ausnahme:

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

Beliebte Antwort

Ich nahm den Rat, der in der Ausnahmebedingungsnachricht erwähnt wird, und fügte meinem Test innerhalb der using Anweisung die folgende Zeile hinzu

    db.Database.CreateIfNotExists();

und das hat für mich funktioniert.





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum