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

Muh*_*ran 0 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();         
}
Run Code Online (Sandbox Code Playgroud)

Yuc*_*uck 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();         
}
Run Code Online (Sandbox Code Playgroud)

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(); 
}
Run Code Online (Sandbox Code Playgroud)