我希望使用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();
}
答案 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();
}