zoukankan      html  css  js  c++  java
  • linq更新数据冲突问题解决

    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)]

  • 相关阅读:
    [C#] 走进异步编程的世界
    [C#] C# 知识回顾
    [C#] 走进异步编程的世界
    [C#] 走进异步编程的世界
    [.Net] 手把手带你将自己打造的类库丢到 NuGet 上
    [.NET] WebApi 生成帮助文档及顺便自动创建简单的测试工具
    [C#] Linq To Objects
    [C#] Linq To Objects
    T-SQL:毕业生出门需知系列(九)
    TortoiseGit:记住用户名和密码
  • 原文地址:https://www.cnblogs.com/kinpauln/p/1809108.html
Copyright © 2011-2022 走看看