Effort.Exceptions.EffortException:数据库尚未初始化 - 非提交更新后?

c# effort entity-framework entity-framework-6

为什么会发生这种异常?这是一个错误吗?

我正在使用Effort,EF测试库来创建我的数据库的内存实例,并遇到这个有趣的场景:

  1. 打开DbContext1
  2. 添加项目到Table (不保存)
  3. 关闭DbContext1
  4. 打开DbContext2
  5. 计算Table项目

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

但是,如果我也在DbContext1执行计数(步骤5),那么DbContext2中的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();
   }    
}    

完全例外:

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 with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因