我有一个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用户对该目录具有写权限。
答案 0 :(得分:0)
例外是DbEntityValidationException
,表示缺少必填字段。缺少的字段是Foo
的关系。
基于Entity Framework Loading Related Entities,我相信我的代码会懒洋洋地加载Foo
的关系。我甚至没有考虑这种可能性,因为我误解了像"EF doesn't support asynchronous lazy loading."这样的评论。在调试模式下检查对象似乎确认了它的关系正在急切地加载。但现在我意识到检查对象可能会触发延迟加载!