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)]
相关阅读 更多 +