您的位置:首页 > 其它

linq更新数据冲突问题解决

2010-08-26 14:57 281 查看
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)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: