尝试 link 当前已验证用户的对象时出现异常

Exception when attempting to link an object to the currently authenticated user

我目前有一个 ASP.NET Web Api 2 应用程序,出于这个问题的目的,它管理着 'Items'。 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 和用户已被正确找到,但在设置所有者 属性 后添加项目仍然存在问题。

A first chance exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll

Additional information: An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

问题是您试图使用两个不同的上下文来跟踪同一个实体,但这行不通。也许你应该查看你的代码,看看你的哪个实体被两个上下文跟踪,这是可能的,因为你使用全局变量 (db) 作为对你的上下文的引用。