问题解决了!
Attach
该方法可能会帮助某人,但在这种情况下将无济于事,因为在将文档加载到Edit GET控制器功能中时已经对其进行了跟踪。附加将引发完全相同的错误。
我在这里遇到的问题是由canUserAccessA()
在更新对象a的状态之前加载A实体的函数引起的。这正在破坏被跟踪的实体,并将对象的状态更改为Detached
。
解决方案是进行修改,canUserAccessA()
以便不会跟踪正在加载的对象。AsNoTracking()
查询上下文时应调用函数。
// User -> Receipt validation
private bool canUserAccessA(int aID)
{
int userID = WebSecurity.GetUserId(User.Identity.Name);
int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID==userID).Count();
return (aFound > 0); //if aFound > 0, then return true, else return false.
}
出于某种原因,我无法.Find(aID)
与之配合使用,AsNoTracking()
但这并不重要,因为我可以通过更改查询来实现相同的目的。
希望这会帮助任何有类似问题的人!