EF7 beta6: ошибка ReadAsync при обновлении

Я создаю API, используя ASP.NET5 и Entity Framework 7.0.0-beta 6, и когда я пытаюсь выполнить обновление, я получаю это исключение:

Исключение типа «Microsoft.Data.Entity.DbUpdateException» возникло в mscorlib.dll, но не было обработано в пользовательском коде.

{"Произошла ошибка при обновлении записей. Подробнее см. во внутреннем исключении."}

Недопустимая попытка вызвать ReadAsync, когда средство чтения закрыто.

Операция обновления завершается правильно, и изменения сохраняются в базе данных, но я получаю это исключение.

Мой код действительно прост, и я не пытаюсь ничего читать после операции обновления:

public class CompanyRepository : ICompanyRepository
{

    MrBellhopContext _dbcontext;


    public async Task UpdateAsync(Company company)
    {
        _dbcontext.Update(company);
        await _dbcontext.SaveChangesAsync();
    }
}



[Route("api/[controller]")]
public class CompanyController : Controller
{


    [HttpPut]
    public async void UpdateAsync([FromBody] Company company)
    {
        if ((!ModelState.IsValid) || (company == null))
        {
            Context.Response.StatusCode = 400;
            return;
        }
        else
        {
            await _repository.UpdateAsync(company);
        }
    }

}

А это трассировка стека:

   at Microsoft.Data.Entity.Update.AffectedCountModificationCommandBatch.<ConsumeAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.Data.Entity.Update.ReaderModificationCommandBatch.<ExecuteAsync>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.Data.Entity.Update.BatchExecutor.<ExecuteAsync>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.Data.Entity.ChangeTracking.Internal.StateManager.<SaveChangesAsync>d__27.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.Data.Entity.DbContext.<SaveChangesAsync>d__27.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at MrBellhop.Data.Repositories.Company.CompanyRepository.<UpdateAsync>d__5.MoveNext() in D:\SciOf\MrBellhop\MrBellhop.Data\Repositories\Company\CompanyRepository.cs:line 47
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at MrBellhop.API.Controllers.Company.CompanyController.<UpdateAsync>d__9.MoveNext() in D:\SciOf\MrBellhop\MrBellhop.API\Controllers\Company\CompanyController.cs:line 62

Кто-нибудь знает, как решить эту проблему?


person unairoldan    schedule 06.08.2015    source источник
comment
Отправьте отчет об ошибке команде EF7. github.com/aspnet/EntityFramework /   -  person    schedule 06.08.2015
comment
сделано: github.com/aspnet/EntityFramework/issues/2786   -  person unairoldan    schedule 06.08.2015


Ответы (1)


Решено!

Я изменил контроллер, чтобы вернуть задачу:

[Route("api/[controller]")]
public class CompanyController : Controller
{


    [HttpPut]
    public async Task UpdateAsync([FromBody] Company company)
    {
        if ((!ModelState.IsValid) || (company == null))
        {
            Context.Response.StatusCode = 400;
            return;
        }
        else
        {
            await _repository.UpdateAsync(company);
        }
    }

}

+информация: https://github.com/aspnet/EntityFramework/issues/2786

person unairoldan    schedule 07.08.2015