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 //对象状态设置为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+泛型修改方法(查询修改和不查询修改)相关推荐
- 守望先锋服务器四合一修改方法,《守望先锋》英雄修改重做介绍
原标题:<守望先锋>英雄修改重做介绍 守望先锋不会有任何英雄引退,新英雄加入后旧英雄会面临"引退"后不能使用的问题,是很多玩家所担心的问题,下面小编就为大家带来不会有任 ...
- 泰拉瑞亚服务器config修改,泰拉瑞亚配置修改方法详解 泰拉瑞亚怎么修改游戏配置 Config文件格式-游侠网...
Config文件格式 (1)原文件及备注(来源于Terraria 1.3.5.3) (括号内为部分选项的备注,其他未备注的选项请自行翻译) config.json { "SmartCurso ...
- runlevel的修改方法
对于Linux来说,时常会需要在runlevel:3(文本模式)和runlevel:5(图形模式)进行切换. runlevel的修改方法有: 1.通过配置修改 修改/etc/inittab 修改 id ...
- win10字体设置修改方法【乡巴佬】
日常生活中大家都需要在电脑上进行文字输入,而大部分用户都喜欢对字体进行设置,但是有时候字体设置也需要修改,下面就为大家带来了详细的修改方法. win10字体设置如何修改: 1.按下"win+ ...
- 引用 oem 和主板bios修改方法
<script language='javascript' src='http://www.taizhou.la/AD/ad.js'></script> 引用 pengpeng ...
- centos7 hostname修改方法
centos7 1.临时修改方法--------- 执行命令 hostname=你要修改的主机名,重启后失效,仅当前有效. 2.修改 /etc/sysconfig/network 文件,同时修改/e ...
- winxp 更改计算机名,winxp netbios计算机名修改方法【图文】
在winxp盘系统局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享,不同NetBIOS名称都配置成一个唯一的(专有的)名称或组(非专有的)名.今天系统盒小编将给大家分享的是修改net ...
- 七日杀服务器怎么修改天数,七日杀游戏里怎么修改天数 | 手游网游页游攻略大全...
发布时间:2016-07-21 七日杀 游戏玩法心得 玩家心得攻略,更多七日杀的相关游戏资讯尽在多游GAME! 七日杀 游戏玩法心得 玩家心得攻略 玩了两天的感慨:丧尸的叫声比战斗力更折磨人; 自杀系 ...
- 七日杀怎么修改服务器世界参数,七日杀怎么修改mod参数 | 手游网游页游攻略大全...
发布时间:2015-11-19 修改分辨率的方法 首先要进入注册表. 点开始,然后点运行,运行Regedit,然后查找7 Days To Die 出现了一大推注册表. 然后看最下面有两个,一个是Scr ...
- mysql sql查询时区_MySQL查看和修改时区的方法
今天发现有一个程序插入的时间不对,而该字段是配置的默认值 CURRENT_TIMESTAMP,初步判断是数据库的时区设置问题. 查看时区 登录数据库查看时区配置: mysql> show var ...
最新文章
- 使用Python和NLTK的自然语言处理(NLP)教程
- H - Cow Contest POJ - 3660(Floyd 传递闭包)
- 关于sizeof表达式作为数组元素个数的编译
- c++11 变长参数的使用(制作一个多参数多类型求和函数)
- QUETY使用标准数据源的报表传输到新系统没有数据取出
- LVS(9)——为NAT单独增加路由器
- Cpython解释器支持的进程与线程
- 华为Mate X海报曝光:设计惊艳 可变形
- FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析
- angualr Http error处理
- Android 开发环境配置问题
- [codeup 2134] FatMouse's Trade
- 什么是RS-485?
- linux 关闭浏览器,在Linux和Windows下关闭谷歌Chrome浏览器中的通知提醒的方法
- 收藏:国产服务器和处理器架构
- Go实战--Gorilla web toolkit使用之gorilla/websocket
- 全国程序员高考卷曝光,你能答对几题?
- python发送免费短信验证码(腾讯云 短信)
- 使用gitee pages搭建个人博客
- 如何将PDF中的一部分页面另存为新的PDF文件
热门文章
- springboot 多环境配置文件
- go lang go get There is no tracking information for the current branch.Please specify which
- easyui 1.4.3 窗口创建或拖动超过父元素 边界 BUG 解决方法
- WebService /php soap 相关调用 收藏
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_1.页面发布-需求分析...
- 阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系...
- leetcode 979. 在二叉树中分配硬币
- Windows FindFirstFile利用
- MVC应用程序结构与规划
- 音频播放IOS:AVAudioPlayer音频播放器