首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6:异步、同步和事务

实体框架6:异步、同步和事务
EN

Stack Overflow用户
提问于 2015-04-14 13:35:26
回答 1查看 331关注 0票数 1

我使用的是ASP.NET MVC和EF 6,我有一个控制器,它调用我的服务层来执行一些操作。其中一个操作必须是异步的,这样控制器就可以在操作完成之前返回一个视图。这就是它的样子:

  1. 正在执行控制器操作。
  2. 调用服务。
  3. 服务执行一些在DB中保存数据的操作。
  4. 服务启动一个新任务并将控制返回给Controller。 (Task.Factory.StartNew(() => X()
  5. 控制器调用另一个跟踪用户操作的服务。这是它失败的地方,因为我在(4)上启动的异步操作使用了一个事务,并且它们共享相同的DbContext。

我该怎么处理呢?

编辑:

我得到了一个异常,因为DbContext被释放了(控制器在执行Action之后正在释放DbContext )。

我通过使用新的DbContext创建一个新服务来解决这个问题,但这不是最好的解决方案。因此,我异步调用一个方法,在该方法中,我创建一个由using语句包围的新DbContext,以便在执行异步方法后将其释放。

EN

回答 1

Stack Overflow用户

发布于 2015-04-14 14:41:27

您可以为步骤ActionResult创建单独的4,并使用HttpClient调用该操作。

这样,它将重新创建DbContext (就像一个新的请求)。

代码语言:javascript
复制
1..
2..
3..
4
Task.Factory.StartNew(async () =>
{
    var url = "/Home/SecretAction";

    using (HttpClient client = new HttpClient())
    {
        client.PostAsync(url, new StringContent(""));
    }
});
5..
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29628827

复制
相关文章

相似问题

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