首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Effort.Exceptions.EffortException :数据库还没有初始化--在非同步更新之后?

Effort.Exceptions.EffortException :数据库还没有初始化--在非同步更新之后?
EN

Stack Overflow用户
提问于 2017-09-09 23:20:44
回答 1查看 1.4K关注 0票数 3

为什么会出现这种异常?这是个虫子吗?

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

  1. 开放DbContext1
  2. 将项添加到Table (不保存)
  3. 关闭DbContext1
  4. 开放DbContext2
  5. Table中计数项目

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

但是,如果我也在DbContext1中执行计数(步骤5),那么DbContext2中的计数不会失败吗?

全码

代码语言:javascript
复制
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();
   }    
}    

完全例外:

代码语言:javascript
复制
Effort.Exceptions.EffortException : Database has not been initialized.

If using CodeFirst try to add the following line:
   context.Database.CreateIfNotExists()
 at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
 at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
 at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
 at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
 at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
 at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
 at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
 at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)        
EN

回答 1

Stack Overflow用户

发布于 2018-04-14 14:31:04

我接受了异常消息中提到的建议,并在using语句中将下面一行添加到我的测试中

代码语言:javascript
复制
    db.Database.CreateIfNotExists();

这对我来说很管用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46135973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档