关于Entity Framework中的Attached报错相关解决方案的总结
关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法,欢迎一起探讨!
1.单个实体对象在进行改删时出现Attached报错,解决方案,请参见:
http://www.cnblogs.com/zuowj/p/4523075.html
http://www.cnblogs.com/scy251147/p/3688844.html
原理:清除context上本地缓存的与之相关联的实体对象
2.单个实体对象在进行改删时,其关联的其它实体对象属性(即:导航属性)出现Attached报错,解决方案,请参见:
http://www.cnblogs.com/zuowj/p/4650781.html
原理:清除context上本地缓存所有的实体对象
3.多个不同的实体对象进行改删时,其自身出错或其关联的其它实体对象属性(即:导航属性)出现Attached报错,解决方案,如下:
首先增加一个用于清除指定实体对象的context上本地缓存方法,如下:
public void DetachHoldingEntities(params object[] entities){var entries = context.ChangeTracker.Entries().Where(e => e.State != EntityState.Detached).ToList();if (entities == null && entities.Length <= 0) return;foreach (var entity in entities){var entry = entries.SingleOrDefault(e => GetEntityKey(e.Entity).Equals(GetEntityKey(entity)));if (entry != null && entry.Entity != null){entry.State = EntityState.Detached;}}}private EntityKey GetEntityKey(object entity){try{var entityWrapper = entity.GetType().GetField("_entityWrapper").GetValue(entity);//获取字段_entityWrapper的值var entityWrapperType = entityWrapper.GetType();//获取字段的类型var entityKey = entityWrapperType.GetProperty("EntityKey").GetValue(entityWrapper, null);//获取EntityKey属性的值return (EntityKey)entityKey;}catch{return null;}}
然后在进行改删前,调用上述清除方法清除指定的实体即可,示例代码如下:
ctx.DetachHoldingEntities(entity.TA_CWBankAccountInfo);
ctx.GetRepository<TA_CWTransferRequestInfo>().Update(entity);
当然还有一个比较简单的方法来避免上述错误,那就是:使用原生的DbContext进行增、删操作,更改则由DbContext的自动跟踪来进行处理,对于不是从DbContext查到的实体对象,若需要参与增删改时,请先进行Attach操作,否则都是来自于DbContext的实体对象则不需要再进行Attach。
转载于:https://www.cnblogs.com/zuowj/p/5088521.html
关于Entity Framework中的Attached报错相关解决方案的总结相关推荐
- word中运行Mathtype报错问题解决方案(The MathType DLL cannot be found)
文章目录 word中运行Mathtype报错问题解决方案 必要时卸载mathtype[也需删除对应的加载项](卸载完mathtype后,word加载项中还是有mathtype的解决方法) 安装之后将M ...
- word中运行Mathtype报错问题解决方案
word中加载Mathtype经常会不成功,我的word出现过报错代码'76','53',please restart word to load Mathtype addin properly,还有未 ...
- Android Studio中R文件报错的解决方案
1.说明 平时呢,我们运行项目的时候.会不小心就出现R文件变红的情况,尽管我们是无心的,但是这种问题太烦恼了,有时处理不好整项目都无法运行,确实给像我这样菜鸟带来了很大的烦恼;这里我提供一种解决方案, ...
- 在Ubuntu中,rabbitMQ报错;解决方案Error: unable to connect to node rabbit@localhost: nodedown
在安装好rabbitMQ的时候,执行rabbitmqctl status时,出现的错误如下: 第一件事情,就是查看日志文件,养成好习惯. rabbitmq的日志文件在 /var/log/rabbitm ...
- IDEA中pom.xml中导入spring-boot-starter-thymeleaf报错的解决方案
问题如下 解决方法 点击该按钮,重新加载Maven即可,这也太简单了吧,由于是第一次做,还是记录一下为好.
- php的old函数,laravel单元测试之phpUnit中old()函数报错解决
php 的 laravel单元测试之phpUnit中old()函数报错解决 前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问 ...
- win10, net framework 3.5 安装报错0x800F081F
win10, net framework 3.5 安装报错0x800F081F "我的电脑",单击右键选择"管理" 在打开的"计算机管理"窗 ...
- 《一起学习rgbdSLAM》中g2o部分报错的问题
<一起学习rgbdSLAM>中g2o部分报错的问题 在高博的<一起学习rgbdSLAM>第六讲中使用到了g2o工具.但是由于版本问题,按照高博的写法来编写代码在编译过程中会报错 ...
- anconda安装后命令行中安装tensorflow报错
现象 anconda安装后命令行中安装tensorflow报错 pip install --upgrade --ignore-installed tensorflow-gpu Building wh ...
最新文章
- linux下,redis 3.2.1双节点集群安装部署
- 输入URL到浏览器显示页面的过程,搜集各方面资料总结一下
- MySQL连不上:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- MediaInfo源代码分析 5:JPEG解析代码分析
- UNIX操作系统中,文件的索引结构放在( )
- echarts 生成 迁徙图_Echarts4+EchartsGL 3D迁徙图(附源码)
- FFmpeg结构体分析: AVCodecContext编解码器上下文
- 获取头条小程序分享二维码
- 如何正确的知晓生僻字发音?无需字典查询,2步手机设置轻松搞定
- 投资怕选错房?跟着买房路线图走不亏!
- 《绿皮书》:剧情紧凑,语言很美
- 【数据结构——图和图的存储结构】
- java实现根据指定日期获取今年 去年 本季度 上个季度 本月 上个月的值
- 简单线性回归问题——线性模型【蒙哥马利】第二章部分课后习题代码
- https证书加密过程介绍
- C++语言入门到精通
- 遇到不认识的字怎么办
- 公交语音播报调试第二天
- 2021全球与中国低氮燃烧器市场现状及未来发展趋势
- 正点原子阿波罗开发板下载调试的bug
热门文章
- wordpress主题部署到github pages(调研+具体操作-还没有完成)
- No ExecutorFactory found to execute the application.
- Method Not Allowed一例
- ubuntu19.10安装haroopad软件
- CentOS下面service mysqld start出现[failed]情况
- qtp连接mysql 无驱动_QTP连接MySQL
- dom 生成图片和链接生成二维码
- 什么是反射和字节码对象。
- python 打印大话西游
- 《嵌入式C编程:PIC单片机和C编程技术与应用》一1.2 注释