The instance of entity type 'xxx' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

摘要:
用于更新数据的UnitWork。上面的错误信息很明显。它告诉我们已经跟踪了一段数据,只要我们取消正在跟踪的数据,跟踪就不能重复。

具体详细错误信息:The instance of entity type 'xxx' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.

代码片段:

                foreach (var item in list)
                {
                    var func = this.GetCodeCheckFunction(item);
                    var gauge = UnitWork.FindSingle(func);

                    if (gauge == null)
                    {
                        //新增
                        UnitWork.Add(item);
                    }
                    else
                    {
                        //修改
                        gauge.GaugeType = item.GaugeType;
                        gauge.ModifiedBy = _auth.GetCurrentUser().User.Id;
                        gauge.ModifiedTime = DateTime.Now;
                        UnitWork.Update(gauge);
                    }
                    UnitWork.Save();
                }

介绍下业务场景:导入时excel中存在重复数据。更新数据用的UnitWork。

上面的报错信息很明显了,它告诉我们一条数据已经被trace了,不能重复trace,只要我们把这条被trace的数据取消就行了。

下面是修改后的代码:

                foreach (var item in list)
                {
                    var func = this.GetCodeCheckFunction(item);
                    var gauge = _dbContext.MesInfoGauges.FirstOrDefault(func);

                    if (gauge == null)
                    {
                        //新增
                        _dbContext.MesInfoGauges.Add(item);
                        _dbContext.SaveChanges();
                        _dbContext.Entry(item).State = EntityState.Detached;
                    }
                    else
                    {
                        //修改
                        gauge.GaugeType = item.GaugeType;
                        gauge.ModifiedBy = user.Id;
                        gauge.ModifiedTime = DateTime.Now;
                        _dbContext.MesInfoGauges.Update(gauge);
                        _dbContext.SaveChanges();
                        _dbContext.Entry(gauge).State = EntityState.Detached;
                    }
                }

保存后,修改当前数据的Entry状态为Detached。

免责声明:文章转载自《The instance of entity type 'xxx' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序与WebRTC联姻能擦出怎样的火花?Mac下Sublime Text常用插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

延时模糊查询

当用户在输入框上输入东西的时候,下面自动显示出搜索结果来。但是我想的是当延迟一秒,判断用户还有没有继续输入或者删除的意愿再进行ajax调用模糊查询。 方案一: fn为延时后执行的函数,delay为延时时间 1 debounce_return: function (fn, delay) { 2 var timer = null; 3...

JQuery 选择器处理特殊字符

在使用JS 选择器的时候,如果含有特殊字符,则选择器选择不了,比如:元素的Id为:QW~~,$("#QW~~"),这样是选择不了的,所以就要对特殊字符进行转义。JS转义函数如下: function escapeJquery(srcString) {// 转义之后的结果var escapseResult = srcString;// javascript正则...

docker 日志在常见系统中的查看方法

1、查看docker日志的方法: 1) ubuntu(14.04)   /var/log/upstart/docker.log 2) ubuntu(16.04)   journalctl -u docker.service 3) centos7/rhel7     journalctl -u docker.service 4) coreos        ...

canvas 钟表

上周开始利用闲暇时间看html5 canvas技术。觉得非常好玩。就利用 canvas 做了一个简陋的钟表。源码非常简单,但是在制作的过程中,进入的误区却不少,浪费了很多时间。先上源码,然后在说说我走的岔路。 源码是基于 require.js 去写的,可以去 官网 了解 require.js 的详细资料。 1 define(function(){ 2...

【转】snort.conf分析(中文)

原文转自 snort.conf分析(中文) snort.conf分析此文件包含一个snort配置样例。共分五步骤:1 设置你的网络变量2 配置动态加载库3 配置预处理器4 配置输出插件5 增加任意的运行时配置向导6 自定义规则集step1:设置你的网络变量1 其中针对本地网络给出3种方式:a) 清晰指定你的本地网络var HOME_NET 192.168....

js循环读取table里面的数据

var tb=document.getElementById("tableId"); //获取table对像 var rows=tb.rows; for(var i=0;i<rows.length;i++){ //--循环所有的行 var cells=rows[i].cells; fo...