因为相同类型的其他实体已具有相同的主键值。在使用 “Attach” 方法或者将实体的状态设置为 “Unchanged” 或 “Modified” 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
这可能是因为某些实体是新的并且尚未接收数据库生成的键值(新实体)在此情况下,使用 “Add” 方法或者 “Added” 实体状态跟踪该图形,然后将非新实体的状态相应设置为 “Unchanged” 或 “Modified”。

其实这个错误就是EF开启事务时EF的上下文中已经存在了一条主键相同的数据,我个人遇到这个问题有多种情况:

情况一:
修改,循环修改一张表的同一条数据(如循环修改同一个物品的库存数量),这这种情况是应为第一次修改是没有清除上下文缓存
代码如下:

var Get_TAB =DB.Table.Where(p => p.ID== "001"&& .AsNoTracking().FirstOrDefault(); for(vari=0,i<5,i==){   Get_TAB .QTY=Get_TAB .QTY+1;//数量DB.Table.Attach(Get_TAB );DB.Entry< Table >(Get_TAB ).State = EntityState.Modified;int c = DB.SaveChanges(); //提交}

这里循环第一次不报错第二次就会报错
解决方案:

       var Get_TAB =DB.Table.Where(p => p.ID== "001"&& .AsNoTracking().FirstOrDefault();//这里查询也要.AsNoTracking()加上这个清除上下文跟踪for(vari=0,i<5,i==){   Get_TAB .QTY=Get_TAB .QTY+1;//数量DB.Table.Attach(Get_TAB );DB.Entry< Table >(Get_TAB ).State =EntityState.Modified;int c = DB.SaveChanges(); //提交DB.Entry< Table >(Get_TAB ).State = EntityState.Detached; //清除EF跟踪}

情况二:
循环操作先添加一条数据,然后在去修改这条数据
代码如下:

for(vari=0,i<5,i==){   var Get_TAB =DB.Table.Where(p => p.ID== "001").AsNoTracking().FirstOrDefault();//这里查询也要.AsNoTracking()加if(Get_TAB==null){Table tb=ewn Table();tb.QTY=1;//数量DB.Table.ADD(tb);int c = DB.SaveChanges(); //提交}else{Get_TAB.QTY=Get_TAB .QTY+1;//数量DB.Table.Attach(Get_TAB );DB.Entry< Table >(Get_TAB ).State =               EntityState.Modified;int c = DB.SaveChanges(); //提交DB.Entry< Table >(Get_TAB ).State = EntityState.Detached; //清除EF跟踪}}

这里也会报错,尤其是新的EF或者新的实体
解决方案:

for(vari=0,i<5,i==){   var Get_TAB =DB.Table.Where(p => p.ID== "001").AsNoTracking().FirstOrDefault();//这里查询也要.AsNoTracking()加if(Get_TAB==null){var tb=ewn Table(){tb.QTY=1,//数量};DB.Entry(tb).State = EntityState.Added;int c = DB.SaveChanges(); DB.Entry(tb).State = EntityState.Detached;//清除添加时的EF上下问缓存}else{Get_TAB.QTY=Get_TAB .QTY+1;//数量DB.Table.Attach(Get_TAB );DB.Entry< Table >(Get_TAB ).State =              EntityState.Modified;int c = DB.SaveChanges(); DB.Entry< Table >(Get_TAB ).State = EntityState.Detached; //清除EF跟踪}}

暂时就写这两种吧

附加类型”XXXX“的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 “Attach“ 方法或者将实体的状态设置为 “Unchanged“ 或 “Modified“相关推荐

  1. EF中报错:附加类型“xxxx”的实体失败,因为相同类型的其他实体已具有相同的主键值。

    报错全文: 附加类型"Model.DepartProduct"的实体失败,因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状 ...

  2. DataBase First 基础(四) 删除或修改表时失败,因为相同类型的其他实体已具有相同的主键值***

    一.删除操作.错误信息 删除操作: #region 遍历,删除foreach (PatientInfoHistroryModel patient in deletePatients){//Patien ...

  3. 错误:因为相同类型的其他实体已具有相同的主键值。在使用 Attach 方法或者将实体的状态设置为 Unchanged 或 Modified 解决方法...

    在更新一个实体类的时候可能会有预先有一次查询或者其它操作,我们这样用目的是为了与提交的数据做一个比较之类的东西,如果先查询再对此类进行SaveChanges就会出错. 我们只要用AsNoTrackin ...

  4. MybatisPlus:SQL语句打印、SQL分析、自定义主键值策略填充(IdType.INPUT)、动态表名、多租户、枚举、类型处理器、连表自定义SQL(使用wrapper)

    文章目录 1. 简单使用以及配置 - 带分页配置 2. 用法 2.0 Wrapper属性 2.1 @TableId - 自定义主键生成策略 2.2 @TableField - 自定义字段值填充 2.3 ...

  5. c# ef报错_关于c#:在EF 6中更新现有数据会引发异常-“…同一类型的实体已经具有相同的主键值。”...

    我正在尝试使用Entity Framework 6,代码优先,没有流畅的映射或类似Automapper的工具来更新记录. 实体(Employee)具有与其关联的其他复合属性,例如Addreess(co ...

  6. 【Hibernate】Hibernate实体关系映射——主键相同的一对一关系

    主键相同的一对一关系 由于两个实体类是一对一的关系,因此可设置两个实体类使用相同的主键.反过来,具有相同主键的实体被视为一对一的关系.这样两个表就省掉了外键关联. 以客户地址管理为例学习主键相同的一对 ...

  7. mysql double 使用_mysql double类型使用与主键自增

    MySQL设置自增字段的相关语句: alter table album change ALBUM_ID ALBUM_ID bigint not null auto_increment; alter t ...

  8. Java实体类设置联合主键_Hibernate 注解方式设置联合主键

    使用 Annotation 设置联合主键有三种方式: 1. 方法一 主键类:将联合主键的字段单独放在类中,该类实现 java.io.Serializable 接口,并重写 equals 和 hasco ...

  9. MySQL主键类型使用int、bigint、varchar区别

    范围 int:从 -2^31 (-2147483648) 到 2^31-1 (2147483647) 的整型数据. bigint:从 -2^63 (-9223372036854775808) 到 2^ ...

最新文章

  1. python安装虚拟环境virtualenv
  2. oracle打印乘法口诀,ORACLE中实现输出乘法口诀
  3. python自动化办公入门书籍推荐-盘点使用Python进行自动化办公所需要的知识点
  4. alpha冲刺day12
  5. Leetcode 31. 下一个排列 (每日一题 20210831)
  6. CSS中常用的样式语法
  7. 堡垒机 请确认是否安装oracle客户端_OracleOracle数据库的安装(超详细)
  8. 利用代码分别实现jdk动态代理和cglib动态代理_代理模式实现方式及优缺点对比...
  9. windowsCE镜像文件结构
  10. 机器学习专题(二):2.1机器学习的数据
  11. 送给初学.net兄弟们的一些话
  12. MySQL 事务控制语句(TCL)
  13. 库依赖关系和开源供应链带来的噩梦
  14. 如何通过http协议知道是从那个站点过来的请求_聊聊HTTP的那些事,以及在它背后的“勾当”...
  15. 【渝粤教育】国家开放大学2018年春季 8038-21T实用管理基础 参考试题
  16. 南宁:“数字城管”让智慧城市建设提质提速
  17. 计算机一级考试的时候用计算器,在WPS文字里设置计算器功能
  18. 微信小程序瀑布流实现
  19. mmdetection训练自己的COCO数据集
  20. 纯C实现的JPEG压缩算法

热门文章

  1. Raffle for Weibo Followers
  2. DALAO们好我是新手
  3. h5在线制作平台h5案例分享
  4. css如何触碰缓慢变化
  5. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...
  6. java nc接口开发_OA和NC系统集成接口开发方案.doc
  7. c++ 计算正弦的近似值_C语言中计算正弦的相关函数总结
  8. 独乐乐不如众乐乐,4款名不见经传的精品软件,一个比一个好用
  9. 常见的信息收集工具和手段
  10. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(二)-中英对照文档及源码赏析