星空网 > 软件开发 > ASP.net

EF+泛型修改方法(查询修改和不查询修改)

最近在做项目用到了@邹华栋老师的EF直接更新数据(不需查询)的方法。 但是如果我们想修改的对象前面被查询过了的话会出一个《ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象》的错误。解决方法是查询的时候加AsNoTracking无跟踪查询。但是我需要实体被EF context追踪,所以加AsNoTracking是不行的。 然后花了三个多小时就改写了方法,改方法可以修改查询过的或是没查询过的对象但是需要主键名。不知道大神们有没有更好的解决方法, 如果有的话欢迎留言交流。

 1    /// <summary> 2    /// 修改 3    /// </summary> 4    /// <param name="model">要修改的实体对象</param> 5    /// <param name="primaryKey">主键名称</param> 6    /// <param name="proNames">要修改的属性名</param> 7    /// <returns></returns> 8    public int Update(T model, string primaryKey, params string[] proNames) 9     {10      //对象添加到ef中11      DbEntityEntry entry = db.Entry<T>(model);12      //从缓存中查询是否存在13      var obj = db.Set<T>().Find(entry.Property(primaryKey).CurrentValue);14      if (obj == null) 15       {16        //对象状态设置为Unchanged17        entry.State = System.Data.EntityState.Unchanged;18        //循环修改数组名状态19        foreach (string proName in proNames)20         {21          entry.Property(proName).IsModified = true;22         }23       }24      else25       {26        //循环更改27        foreach (string proName in proNames)28         {29          db.Entry(obj).Property(proName).CurrentValue = entry.Property(proName).CurrentValue;30         }31 32       }33 34      //保存35      return db.SaveChanges();36    }

 




原标题:EF+泛型修改方法(查询修改和不查询修改)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Qi:https://www.ikjzd.com/w/332
Argos(爱顾商城):https://www.ikjzd.com/w/3320
坂田五虎:https://www.ikjzd.com/w/3321
FLYWHEEL:https://www.ikjzd.com/w/3322
联合国贸易和发展会议:https://www.ikjzd.com/w/3323
Elevate:https://www.ikjzd.com/w/3324
商机!速卖通推出小B采销节,挖掘机、莫桑钻、电动车近期在海外走俏!:https://www.xlkjsw.com/news/93297.html
Zalando对欧盟在线平台监管费提出质疑:https://www.kjdsnews.com/a/1842241.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流