关于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报错相关解决方案的总结相关推荐

  1. word中运行Mathtype报错问题解决方案(The MathType DLL cannot be found)

    文章目录 word中运行Mathtype报错问题解决方案 必要时卸载mathtype[也需删除对应的加载项](卸载完mathtype后,word加载项中还是有mathtype的解决方法) 安装之后将M ...

  2. word中运行Mathtype报错问题解决方案

    word中加载Mathtype经常会不成功,我的word出现过报错代码'76','53',please restart word to load Mathtype addin properly,还有未 ...

  3. Android Studio中R文件报错的解决方案

    1.说明 平时呢,我们运行项目的时候.会不小心就出现R文件变红的情况,尽管我们是无心的,但是这种问题太烦恼了,有时处理不好整项目都无法运行,确实给像我这样菜鸟带来了很大的烦恼;这里我提供一种解决方案, ...

  4. 在Ubuntu中,rabbitMQ报错;解决方案Error: unable to connect to node rabbit@localhost: nodedown

    在安装好rabbitMQ的时候,执行rabbitmqctl status时,出现的错误如下: 第一件事情,就是查看日志文件,养成好习惯. rabbitmq的日志文件在 /var/log/rabbitm ...

  5. IDEA中pom.xml中导入spring-boot-starter-thymeleaf报错的解决方案

    问题如下 解决方法 点击该按钮,重新加载Maven即可,这也太简单了吧,由于是第一次做,还是记录一下为好.

  6. php的old函数,laravel单元测试之phpUnit中old()函数报错解决

    php 的 laravel单元测试之phpUnit中old()函数报错解决 前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问 ...

  7. win10, net framework 3.5 安装报错0x800F081F

    win10, net framework 3.5 安装报错0x800F081F "我的电脑",单击右键选择"管理" 在打开的"计算机管理"窗 ...

  8. 《一起学习rgbdSLAM》中g2o部分报错的问题

    <一起学习rgbdSLAM>中g2o部分报错的问题 在高博的<一起学习rgbdSLAM>第六讲中使用到了g2o工具.但是由于版本问题,按照高博的写法来编写代码在编译过程中会报错 ...

  9. anconda安装后命令行中安装tensorflow报错

    现象  anconda安装后命令行中安装tensorflow报错 pip install --upgrade --ignore-installed tensorflow-gpu Building wh ...

最新文章

  1. linux下,redis 3.2.1双节点集群安装部署
  2. 输入URL到浏览器显示页面的过程,搜集各方面资料总结一下
  3. MySQL连不上:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  4. MediaInfo源代码分析 5:JPEG解析代码分析
  5. UNIX操作系统中,文件的索引结构放在( )
  6. echarts 生成 迁徙图_Echarts4+EchartsGL 3D迁徙图(附源码)
  7. FFmpeg结构体分析: AVCodecContext编解码器上下文
  8. 获取头条小程序分享二维码
  9. 如何正确的知晓生僻字发音?无需字典查询,2步手机设置轻松搞定
  10. 投资怕选错房?跟着买房路线图走不亏!
  11. 《绿皮书》:剧情紧凑,语言很美
  12. 【数据结构——图和图的存储结构】
  13. java实现根据指定日期获取今年 去年 本季度 上个季度 本月 上个月的值
  14. 简单线性回归问题——线性模型【蒙哥马利】第二章部分课后习题代码
  15. https证书加密过程介绍
  16. C++语言入门到精通
  17. 遇到不认识的字怎么办
  18. 公交语音播报调试第二天
  19. 2021全球与中国低氮燃烧器市场现状及未来发展趋势
  20. 正点原子阿波罗开发板下载调试的bug

热门文章

  1. wordpress主题部署到github pages(调研+具体操作-还没有完成)
  2. No ExecutorFactory found to execute the application.
  3. Method Not Allowed一例
  4. ubuntu19.10安装haroopad软件
  5. CentOS下面service mysqld start出现[failed]情况
  6. qtp连接mysql 无驱动_QTP连接MySQL
  7. dom 生成图片和链接生成二维码
  8. 什么是反射和字节码对象。
  9. python 打印大话西游
  10. 《嵌入式C编程:PIC单片机和C编程技术与应用》一1.2 注释