实体框架db.SaveChanges在Task()中运行时不起作用

时间:2015-03-06 08:34:27

标签: c# asp.net-mvc-4 asp.net-web-api async-await

我的WebAPI控制器中有以下内容:

  Task.Run(() => _userService.LoginWork(model.Username)); 

LoginWork的位置:

  // var user = db.Users where... 
  user.LoggedIn = DateTime.UtcNow;
  db.SaveChanges()

一个非常简单的操作,我试图在不阻止WebAPI工作的情况下执行。当我不在任务中运行它时,它工作正常。但是当我在Task中运行时,db永远不会更新。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

我会在没有看到整个代码的情况下尝试猜测这个问题。

您在WebApi请求上下文之外发布了一个新任务,并且您有一个由IoC容器注入的EntityFramework上下文(或依赖于上下文的存储库),并且该EntityFramework上下文被配置为每个请求的实例。

这会导致该方法抛出ObjectDisposedException,但由于它位于异步任务中,因此您实际上看不到异常。