linq更新数据冲突问题解决
时间:2010-08-26 来源:山村果园
linq更新数据时,产生冲突,出现类似 "找不到行或行已更改" 的错误。
解决方法:
在提交的时候,不要SubmitChanges()直接提交,采用如下方式
using (DataContext dc = new DataContext(Common.GetDBConnStr()))
{
try
{
Permissions.Modal.Module module = (from mod in dc.GetTable<Permissions.Modal.Module>()
where mod.ID == id
select mod)
.FirstOrDefault<Permissions.Modal.Module>();
module.Name = moduleName;
module.State = state;
dc.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
return true;
}
catch (System.Data.Linq.ChangeConflictException)
{
foreach (System.Data.Linq.ObjectChangeConflict occ in dc.ChangeConflicts)
{
//以下是解决冲突的三种方法,选一种即可
// 使用当前数据库中的值,覆盖Linq缓存中实体对象的值
//occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
// 使用Linq缓存中实体对象的值,覆盖当前数据库中的值
//occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);
// 只更新实体对象中改变的字段的值,其他的保留不变
occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);
}
// 这个地方要注意,Catch方法中,我们前面只是指明了怎样来解决冲突,这个地方还需要再次提交更新,这样的话,值 //才会提交到数据库。
dc.SubmitChanges();
return true;
}
catch (Exception) { return false; }
}
或者更简单的方式是,对需要更新的字段在实体类中加如下限制:[Column(UpdateCheck=UpdateCheck.Never)]
相关阅读 更多 +
排行榜 更多 +










