在ObjectStateManager中找不到具有与提供的对象的键匹配的键的对象

时间:2011-12-15 14:39:52

标签: c# entity-framework-4

我希望使用FormView更新来自ObjectDataSource的记录,并失去我的一天来解决此错误。

  

具有与所提供对象的键匹配的键的对象可以   在ObjectStateManager中找不到。验证密钥值   提供的对象匹配对象的键值   必须应用更改。

我的代码在

下面
private static Entities1 _db = null;

public static Entities1 CreateDataContext()
{
    if (_db == null)
    {
        _db = new Entities1(System.Configuration.ConfigurationManager.ConnectionStrings["Entities1"].ConnectionString);
        _db.games.MergeOption = MergeOption.NoTracking;
        _db.my_aspnet_users.MergeOption = MergeOption.NoTracking;
        _db.platforms.MergeOption = MergeOption.NoTracking;
    }
    return _db;
}

public void Update(game item)
{
    Entities1 DB = CreateDataContext();
    item.modified = DateTime.Now;
    var obj = (from u in DB.games
               where u.idgames == item.idgames
               select u).First();
    DB.games.ApplyCurrentValues(item);//Error Here
    DB.SaveChanges();         
}

1 个答案:

答案 0 :(得分:6)

在你的方法中:

public void Update(game item)
{
    Entities1 DB = CreateDataContext();
    item.modified = DateTime.Now;
    var obj = (from u in DB.games
               where u.idgames == item.idgames
               select u).First();
    DB.games.ApplyCurrentValues(item);//Error Here
    DB.SaveChanges();         
}

item未附加,因此无法更新。这也是错误信息告诉你的内容。

您似乎想要使用从您的上下文中检索的obj。然后将obj的值设置为item中的值,并使用obj进行更新。

编辑样本 ...

如果您只想设置修改日期和时间,请执行以下操作:

public void Update(game item) {
    Entities1 DB = CreateDataContext();

    var obj = (from u in DB.games
               where u.idgames == item.idgames
               select u).SingleOrDefault();
    if (obj == null) {
      // handle the case where obj isn't found
      // probably by throwing an exception
    }

    obj.modified = DateTime.Now;
    DB.games.ApplyCurrentValues(obj);
    DB.SaveChanges(); 
}