【问题标题】:Entity framework 6 async/await fail in parallel request实体框架6异步/等待并行请求失败
【发布时间】:2016-06-20 06:53:09
【问题描述】:

我正在使用带有 EF 6 的 ASP.NET 4.6 到一个新的 Web Api 2 项目,我已经阅读了很多描述异步/等待模式的文章,很明显,对于很多请求,这种模式会增加性能有很多原因。 所以我决定第一次使用它。 在决定创建一个 Biz 项目和一个 DAL 项目这里举个例子。

这是控制器方法:

[HttpGet]
public async Task<bool> CheckValueValidity(string value, string type)
{
   return await _accountsBiz.CheckValueTypeValidity(value, type);
}

我在控制器构造函数中实例化 biz 对象。

这是商业区:

public async Task<bool> CheckValueTypeValidity(string value, string type)
    {
        bool isValid = false;
        switch (type.ToLower())
        {
            case "email":
                isValid = await _accountsRepository.CheckEmailValidity(value);
                break;
            case "username":
                isValid = await _accountsRepository.CheckUserNameValidity(value);
                break;
        }
        return isValid;
    }

我在 BIZ 构造函数中实例化存储库。

最后这是 DAL 方法:

public async Task<bool> CheckEmailValidity(string email)
    {
        using(MyEntities db = new MyEntities())
        {
            return await db.AspNetUsers.CountAsync(u => u.Email == email) > 0 ? false : true;
        }
    }

在我同时提出两个请求之前,这一切似乎都可以正常工作,其中一个返回正确的值,另一个说

在前一个异步操作完成之前,在此上下文上启动了第二个操作。使用 'await' 确保在此上下文中调用另一个方法之前所有异步操作都已完成。不保证任何实例成员都是线程安全的。

我从两个不同的客户端发出请求,所以上下文应该不同。应该……

我不知道如何解决它。我读了很多,我的代码似乎是正确的。

问题是为什么会抛出这个错误?看不懂

感谢您的建议。

【问题讨论】:

    标签: asp.net entity-framework asp.net-web-api async-await dbcontext


    【解决方案1】:

    好的,在执行流程中发现错误,有一个方法使用DbContext 没有using 块....我的错误,但现在很明显必须在每个请求中处理上下文!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多