SaveChanges仅适用于调试

时间:2017-11-07 18:37:31

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

我有一个MVC控制器方法,如下所示:

[HttpPost]
public async Task<JsonResult> Edit(Foo input)
{
    if (ModelState.IsValid)
    {
        Foo current = await db.foos.FindAsync(input.Id);
        current.SomeProp = input.SomeProp; // etc.
        db.Entry(current).State = EntityState.Modified;
        await db.SaveChangesAsync();
        return Json(true, JsonRequestBehavior.AllowGet);
    }
    return Json(false, JsonRequestBehavior.AllowGet);
}

这在我在Visual Studio中进行调试时有效。当我没有调试时,我得到500. 调试在这里有什么不同?

注意:我没有使用db.Entry(current).CurrentValues.SetValues(input);,因为Foo有一些属性我不想在这里更改。

编辑:我无法弄清楚如何在不处于调试模式时获取异常详细信息。我试着将它写入文件。这在调试模式下工作(throw new Exception("test");取代仅在调试模式下工作的语句)但是在没有调试时我得到401。 IIS用户对该目录具有写权限。

1 个答案:

答案 0 :(得分:0)

例外是DbEntityValidationException,表示缺少必填字段。缺少的字段是Foo的关系。

基于Entity Framework Loading Related Entities,我相信我的代码会懒洋洋地加载Foo的关系。我甚至没有考虑这种可能性,因为我误解了像"EF doesn't support asynchronous lazy loading."这样的评论。在调试模式下检查对象似乎确认了它的关系正在急切地加载。但现在我意识到检查对象可能会触发延迟加载!