C# 使用实体框架更新行时出现异常

C# 使用实体框架更新行时出现异常,c#,entity-framework,C#,Entity Framework,尝试更新记录时出现以下异常: System.InvalidOperationException:已存在具有相同密钥的对象 存在于ObjectStateManager中。ObjectStateManager无法跟踪 具有相同键的多个对象 代码如下:(player是player的契约版本,作为参数传递给方法,ToDbPlayer()是一个扩展方法,它接受contract.player对象并为DB创建一个等价的对象) 我不知道该怎么做——我只是想简单地更新数据库中的记录,但是当我试图将其附加到上下文时

尝试更新记录时出现以下异常:

System.InvalidOperationException:已存在具有相同密钥的对象 存在于ObjectStateManager中。ObjectStateManager无法跟踪 具有相同键的多个对象

代码如下:(player是player的契约版本,作为参数传递给方法,ToDbPlayer()是一个扩展方法,它接受contract.player对象并为DB创建一个等价的对象)

我不知道该怎么做——我只是想简单地更新数据库中的记录,但是当我试图将其附加到上下文时,它就会崩溃


我对我的EF技能没有太多信心,因此如果有人能为我指出正确的方向,我将不胜感激。

当您进行查找时,实体将已连接,因此您将无法再次连接它

如果您需要获取实体而不将其固定,请使用.AsNoTracking()即

虽然没有当场发现(事后无法使用Find(),但只是检查了该ID返回的玩家数量)-它已经完成了需要做的事情,谢谢!
using (var context = _contextFactory.CreateEntities())
{
    var dbPlayer = context.Players.Find(player.PlayerId);
    var entity = context.Players.Attach(player.ToDbPlayer()); //here error occurs
    context.Entry(entity).State = dbPlayer == null ? EntityState.Added : EntityState.Modified;
    context.SaveChanges();
}
var dbPlayer = context.Players.AsNoTracking().Find(player.PlayerId)