我目前有一个ASP.NET Web Api 2应用程序,出于此问题的目的,它管理“项目”。 ASP.NET Identity 2用于为请求提供身份验证,数据由Entity Framework 6提供。
我的目标是将项目的所有者属性自动设置为验证POST请求的用户。下面是目前的代码:
public async Task<IHttpActionResult> PostItem(Item item)
{
var userId = User.Identity.GetUserId();
var user = await UserManager.FindByIdAsync(userId);
// Set the Owner to the currently authenticated user
item.Owner = user;
db.Items.Add(item); // Exception Thrown Here
await db.SaveChangesAsync();
...
}
但是,调用该方法时,会发生以下异常。正确找到当前的userId和user,但在设置了所有者属性后仍然存在添加该项的问题。
类型'System.InvalidOperationException'的第一次机会异常 发生在EntityFramework.dll
中附加信息:无法引用实体对象 IEntityChangeTracker的多个实例。
答案 0 :(得分:1)
问题在于您尝试使用两种不同的上下文来跟踪同一实体,而这种情况并不起作用。也许您应该查看代码并查看哪些实体被两个上下文跟踪,因为您使用全局变量(db
)作为对上下文的引用,这是可能的。