为什么代码适用于SaveChanges而不适用于SaveChangesAsync

时间:2017-03-02 16:03:10

标签: c# asp.net-core-mvc entity-framework-core

我在VS2015上使用ASP.NET MVC Core 1.1。我想在我的控制器代码的一部分中理解以下内容:以下代码的最后一行给出错误:There is already an open DataReader associated with this Command which must be closed first.。但是,如果我将SaveChangesAsync()更改为SaveChanges()代码可以正常工作。

控制器快照

public IActionResult myActionMethod(...)
{
    ...
    var oRecToUpdate = _context.Order.Where(c => c.OrdersId == 104).SingleOrDefault();
    if (oRecToUpdate != null)
    {
        oRecToUpdate.Price = 98.09;
        _context.SaveChangesAsync();
    }

    string sStateNumer = _context.StateNames
        .Where(s => s.State == "myState").Select(t => t.StateNumber).SingleOrDefault();
    ....
}

1 个答案:

答案 0 :(得分:3)

因为您在上下文中调用异步方法,所以在您进入下一个查询时它可能仍在运行。您需要await来电以阻止此操作:

await _context.SaveChangesAsync();

或者调用非异步版本:

_context.SaveChanges();