最近在做项目用到了@邹华栋老师的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                //对象状态设置为Unchanged
17                entry.State = System.Data.EntityState.Unchanged;
18                //循环修改数组名状态
19                foreach (string proName in proNames)
20                {
21                    entry.Property(proName).IsModified = true;
22                }
23            }
24            else
25            {
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        }

转载于:https://www.cnblogs.com/mauleta/p/4627357.html

EF+泛型修改方法(查询修改和不查询修改)相关推荐

  1. 守望先锋服务器四合一修改方法,《守望先锋》英雄修改重做介绍

    原标题:<守望先锋>英雄修改重做介绍 守望先锋不会有任何英雄引退,新英雄加入后旧英雄会面临"引退"后不能使用的问题,是很多玩家所担心的问题,下面小编就为大家带来不会有任 ...

  2. 泰拉瑞亚服务器config修改,泰拉瑞亚配置修改方法详解 泰拉瑞亚怎么修改游戏配置 Config文件格式-游侠网...

    Config文件格式 (1)原文件及备注(来源于Terraria 1.3.5.3) (括号内为部分选项的备注,其他未备注的选项请自行翻译) config.json { "SmartCurso ...

  3. runlevel的修改方法

    对于Linux来说,时常会需要在runlevel:3(文本模式)和runlevel:5(图形模式)进行切换. runlevel的修改方法有: 1.通过配置修改 修改/etc/inittab 修改 id ...

  4. win10字体设置修改方法【乡巴佬】

    日常生活中大家都需要在电脑上进行文字输入,而大部分用户都喜欢对字体进行设置,但是有时候字体设置也需要修改,下面就为大家带来了详细的修改方法. win10字体设置如何修改: 1.按下"win+ ...

  5. 引用 oem 和主板bios修改方法

    <script language='javascript' src='http://www.taizhou.la/AD/ad.js'></script> 引用 pengpeng ...

  6. centos7 hostname修改方法

    centos7 1.临时修改方法---------  执行命令 hostname=你要修改的主机名,重启后失效,仅当前有效. 2.修改 /etc/sysconfig/network 文件,同时修改/e ...

  7. winxp 更改计算机名,winxp netbios计算机名修改方法【图文】

    在winxp盘系统局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享,不同NetBIOS名称都配置成一个唯一的(专有的)名称或组(非专有的)名.今天系统盒小编将给大家分享的是修改net ...

  8. 七日杀服务器怎么修改天数,七日杀游戏里怎么修改天数 | 手游网游页游攻略大全...

    发布时间:2016-07-21 七日杀 游戏玩法心得 玩家心得攻略,更多七日杀的相关游戏资讯尽在多游GAME! 七日杀 游戏玩法心得 玩家心得攻略 玩了两天的感慨:丧尸的叫声比战斗力更折磨人; 自杀系 ...

  9. 七日杀怎么修改服务器世界参数,七日杀怎么修改mod参数 | 手游网游页游攻略大全...

    发布时间:2015-11-19 修改分辨率的方法 首先要进入注册表. 点开始,然后点运行,运行Regedit,然后查找7 Days To Die 出现了一大推注册表. 然后看最下面有两个,一个是Scr ...

  10. mysql sql查询时区_MySQL查看和修改时区的方法

    今天发现有一个程序插入的时间不对,而该字段是配置的默认值 CURRENT_TIMESTAMP,初步判断是数据库的时区设置问题. 查看时区 登录数据库查看时区配置: mysql> show var ...

最新文章

  1. 使用Python和NLTK的自然语言处理(NLP)教程
  2. H - Cow Contest POJ - 3660(Floyd 传递闭包)
  3. 关于sizeof表达式作为数组元素个数的编译
  4. c++11 变长参数的使用(制作一个多参数多类型求和函数)
  5. QUETY使用标准数据源的报表传输到新系统没有数据取出
  6. LVS(9)——为NAT单独增加路由器
  7. Cpython解释器支持的进程与线程
  8. 华为Mate X海报曝光:设计惊艳 可变形
  9. FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析
  10. angualr Http error处理
  11. Android 开发环境配置问题
  12. [codeup 2134] FatMouse's Trade
  13. 什么是RS-485?
  14. linux 关闭浏览器,在Linux和Windows下关闭谷歌Chrome浏览器中的通知提醒的方法
  15. 收藏:国产服务器和处理器架构
  16. Go实战--Gorilla web toolkit使用之gorilla/websocket
  17. 全国程序员高考卷曝光,你能答对几题?
  18. python发送免费短信验证码(腾讯云 短信)
  19. 使用gitee pages搭建个人博客
  20. 如何将PDF中的一部分页面另存为新的PDF文件

热门文章

  1. springboot 多环境配置文件
  2. go lang go get There is no tracking information for the current branch.Please specify which
  3. easyui 1.4.3 窗口创建或拖动超过父元素 边界 BUG 解决方法
  4. WebService /php soap 相关调用 收藏
  5. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_1.页面发布-需求分析...
  6. 阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系...
  7. leetcode 979. 在二叉树中分配硬币
  8. Windows FindFirstFile利用
  9. MVC应用程序结构与规划
  10. 音频播放IOS:AVAudioPlayer音频播放器