附加类型”XXXX“的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 “Attach“ 方法或者将实体的状态设置为 “Unchanged“ 或 “Modified“
因为相同类型的其他实体已具有相同的主键值。在使用 “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“相关推荐
- EF中报错:附加类型“xxxx”的实体失败,因为相同类型的其他实体已具有相同的主键值。
报错全文: 附加类型"Model.DepartProduct"的实体失败,因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状 ...
- DataBase First 基础(四) 删除或修改表时失败,因为相同类型的其他实体已具有相同的主键值***
一.删除操作.错误信息 删除操作: #region 遍历,删除foreach (PatientInfoHistroryModel patient in deletePatients){//Patien ...
- 错误:因为相同类型的其他实体已具有相同的主键值。在使用 Attach 方法或者将实体的状态设置为 Unchanged 或 Modified 解决方法...
在更新一个实体类的时候可能会有预先有一次查询或者其它操作,我们这样用目的是为了与提交的数据做一个比较之类的东西,如果先查询再对此类进行SaveChanges就会出错. 我们只要用AsNoTrackin ...
- MybatisPlus:SQL语句打印、SQL分析、自定义主键值策略填充(IdType.INPUT)、动态表名、多租户、枚举、类型处理器、连表自定义SQL(使用wrapper)
文章目录 1. 简单使用以及配置 - 带分页配置 2. 用法 2.0 Wrapper属性 2.1 @TableId - 自定义主键生成策略 2.2 @TableField - 自定义字段值填充 2.3 ...
- c# ef报错_关于c#:在EF 6中更新现有数据会引发异常-“…同一类型的实体已经具有相同的主键值。”...
我正在尝试使用Entity Framework 6,代码优先,没有流畅的映射或类似Automapper的工具来更新记录. 实体(Employee)具有与其关联的其他复合属性,例如Addreess(co ...
- 【Hibernate】Hibernate实体关系映射——主键相同的一对一关系
主键相同的一对一关系 由于两个实体类是一对一的关系,因此可设置两个实体类使用相同的主键.反过来,具有相同主键的实体被视为一对一的关系.这样两个表就省掉了外键关联. 以客户地址管理为例学习主键相同的一对 ...
- mysql double 使用_mysql double类型使用与主键自增
MySQL设置自增字段的相关语句: alter table album change ALBUM_ID ALBUM_ID bigint not null auto_increment; alter t ...
- Java实体类设置联合主键_Hibernate 注解方式设置联合主键
使用 Annotation 设置联合主键有三种方式: 1. 方法一 主键类:将联合主键的字段单独放在类中,该类实现 java.io.Serializable 接口,并重写 equals 和 hasco ...
- MySQL主键类型使用int、bigint、varchar区别
范围 int:从 -2^31 (-2147483648) 到 2^31-1 (2147483647) 的整型数据. bigint:从 -2^63 (-9223372036854775808) 到 2^ ...
最新文章
- python安装虚拟环境virtualenv
- oracle打印乘法口诀,ORACLE中实现输出乘法口诀
- python自动化办公入门书籍推荐-盘点使用Python进行自动化办公所需要的知识点
- alpha冲刺day12
- Leetcode 31. 下一个排列 (每日一题 20210831)
- CSS中常用的样式语法
- 堡垒机 请确认是否安装oracle客户端_OracleOracle数据库的安装(超详细)
- 利用代码分别实现jdk动态代理和cglib动态代理_代理模式实现方式及优缺点对比...
- windowsCE镜像文件结构
- 机器学习专题(二):2.1机器学习的数据
- 送给初学.net兄弟们的一些话
- MySQL 事务控制语句(TCL)
- 库依赖关系和开源供应链带来的噩梦
- 如何通过http协议知道是从那个站点过来的请求_聊聊HTTP的那些事,以及在它背后的“勾当”...
- 【渝粤教育】国家开放大学2018年春季 8038-21T实用管理基础 参考试题
- 南宁:“数字城管”让智慧城市建设提质提速
- 计算机一级考试的时候用计算器,在WPS文字里设置计算器功能
- 微信小程序瀑布流实现
- mmdetection训练自己的COCO数据集
- 纯C实现的JPEG压缩算法
热门文章
- Raffle for Weibo Followers
- DALAO们好我是新手
- h5在线制作平台h5案例分享
- css如何触碰缓慢变化
- python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...
- java nc接口开发_OA和NC系统集成接口开发方案.doc
- c++ 计算正弦的近似值_C语言中计算正弦的相关函数总结
- 独乐乐不如众乐乐,4款名不见经传的精品软件,一个比一个好用
- 常见的信息收集工具和手段
- commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(二)-中英对照文档及源码赏析