Effort.Exceptions.EffortException: la base de datos no se ha inicializado, ¿después de una actualización sin compromiso?


Pregunta

¿Por qué ocurre esta excepción? ¿Es esto un error?

Estoy usando Effort, la biblioteca de pruebas de EF para crear una instancia en memoria de mi base de datos y encontrar este interesante escenario:

  1. Abrir DbContext1
  2. Agregar elemento a la Table (no guardar)
  3. Cerrar DbContext1
  4. Abrir DbContext2
  5. Contar elementos en la Table

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

Sin embargo, si realizo un conteo (paso 5) también en DbContext1 , ¿el conteo en DbContext2 no falla?

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

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

Respuesta popular

Tomé el consejo mencionado en el mensaje de excepción y agregué la siguiente línea a mi prueba dentro de la declaración de using

    db.Database.CreateIfNotExists();

y eso funciono para mi





Licencia bajo: CC-BY-SA
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué