Effort.Exceptions.EffortException: база данных не была инициализирована - после немедленного обновления?


Вопрос

Почему возникает это исключение? Это ошибка?

Я использую Effort, библиотеку тестирования EF, чтобы создать экземпляр памяти моей базы данных и запустить этот интересный сценарий:

  1. Открыть DbContext1
  2. Добавить элемент в Table (не сохранять)
  3. Закрыть DbContext1
  4. Открыть DbContext2
  5. Считать элементы в Table

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

Однако, если я выполняю счет (шаг 5) также в DbContext1 то граф в DbContext2 не DbContext2 ?

Полный код :

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

Полное исключение:

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

Популярные ответы

Я принял совет, упомянутый в сообщении об исключении, и добавил следующую строку в мой тест в инструкции using

    db.Database.CreateIfNotExists();

и это сработало для меня.





Лицензировано согласно: CC-BY-SA
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему