EF Core的一个紧急bug,我这样修改

1

背景

今日在生产环境碰到如下错误

ASP.NET MVC项目 Repository层中,Delete总是失败

another entity of the same type already has the same primary key value

具体错误提示:

Attaching an entity of type 

'ResearchManager.Models.BigTracker_UI.Product_Tracker_Scraping' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.

字面意思

c0eb7b1631eef6e78e92f97de25939d5.png

2

解决思路

Attach该方法可能会对某人有所帮助,但在这种情况下将无济于事,因为在将文档加载到Edit GET控制器功能中时已经对其进行了跟踪。附加将引发完全相同的错误。

我在这里遇到的问题是由canUserAccessA()在更新对象a的状态之前加载A实体的函数引起的。这正在破坏被跟踪的实体,并且正在将对象的状态更改为Detached。

解决方案是进行修改canUserAccessA(),以使不会跟踪正在加载的对象。AsNoTracking()查询上下文时应调用函数。

// User -> Receipt validation
private bool canUserAccessA(int aID)
{int userID = WebSecurity.GetUserId(User.Identity.Name);int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID==userID).Count();return (aFound > 0); //if aFound > 0, then return true, else return false.
}

3

总结

1、查询时让EF不要跟踪

2、在进行删除时首先移除主键实体(如果存在)再进行操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑home键在哪_如何灵活使用电脑键盘上的各个键

电脑上的键有很多但是你真的了解它们的用法么,今天笔者给大家分享一下电脑键盘上各个键的作用。区域一:共有13个按键,ESC,F1-F2。F1:帮助信息。F2:选定一个文件或文件夹。按下F2可以重命名。F3:…

svn强制注释 linux,svn强制要求提交注释

看了N多资料,不知道为什么我总是不成功。现在终于测试成功了,下面是实际操作过程~~使用bitnami一键安装了subversion,在使用中,希望开发人员提交时必须输入日志内容,可通过以下方法实现。首先转到相应的库的hook目录中…

jquery easyui datagrid getSelections用法

1.datagrid、 数据绑定 $(#tt).datagrid({ url: GetDataJosn, title: DataGrid, width: 800, height: 300, pageSize: 10, idField: productid, fitColumns: true,…

XCode5 真机调试及发布应用

一、XCODE 真机测试 Xcode5已经很智能,只需生成一个开发证书,安装后,插入设备会自动添加,注意,当Mac系统升级后,证书需要重新生成。证书生成步骤:1、生成 CertificateSigningRequest.certSignin…

身家4400亿美元的他,吃低于3美元的早餐,和2个老婆同居28年!

全世界只有3.14 % 的人关注了爆炸吧知识1930年8月30日,巴菲特出生在美国内布拉斯加州的奥马哈市。当时的美国还笼罩在经济大萧条的阴影中,还好父亲是位出色的股票掮客,这也让小巴菲特的童年过得顺顺利利。但小巴同学从小就不合群,…

怎么才能把项目做烂?!

上一篇聊聊《为什么被用户牵着鼻子走?刚参加工作做项目常说的一句话:没有困难,制造困难也得上。到不是真闲得蛋疼制造困难,而是表达解决困难的决心。2009年在某煤炭集团做了一个动态监测煤质煤量的实时系统,当时一般为…

电脑重新分区扩大c盘_两种方法,给电脑C盘增加10G的容量,电脑焕然一新

在我们日常的生活工作中,手机电脑已经成为了不可或缺的存在。然而当我们的手机电脑经过长年累月的使用之后,手机电脑都会变得很卡,在电脑上最直观的显示就是电脑C盘分区显示为红色,可用空间已经不够用了。我们知道,电脑…

python wx提示框字体_使用wxStyledTextCtrl实现代码提示

wxStyledTextCtrl是wxPython对流行的Scintilla的包装,Scintilla的网站(http://www.scintilla.org/),wxStyledTextCtrl是一个功能强大的富文本编辑控件,常见的编辑器功能都能找到,包括代码高亮,搜索替换,拷贝…

PHP5中PDO的简单使用

PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的php_mysql.dll之类的了,那怎么办捏,我们…

redis在linux搭建集群,Linux/Centos 7 redis4 集群搭建

背景说明:项目初期使用AWS的ElastiCache Redis作为系统的数据缓存,近期由于数据量和QPS加大,导致Redis存在压力,进行了两次的单点垂直升级,缓解了目前的压力。项目组进行了数据和费用的评估,考虑到日后升级…

远程控制

我和舍友共用ADSL,我的电脑接在宽带路由器上面。为了能远程控制家里的电脑,我是煞费苦心,最后终于OK了,把一些经验心得写出来。 首先想要远程登录的机器最好是WinXP或者Win2003(据说Win2003更好一些,可以多用户同时登…

防SQL注入的最好实现方式是什么?

咨询区 LeonidasFett:我的问题是:如何在 C# 中是使用SQL防注入,我的模糊理解是可以通过限定应用程序接收的字段格式来实现最终目的,比如说:email字段只能接收email的格式,name字段不能输入特殊字符&#xf…

微软职位内部推荐-Senior SW Engineer for Application Ecosystem

微软近期Open的职位:Job posting title: Senior Development EngineerLocation: China, BeijingDivision: Operations System Group Engineering&nbsp Group OverviewOSG is delivering flagship products in Microsoft. China is a second largest economy in the world. …

数学除了摧残祖国的花朵外,竟然还可以赢钱!

全世界只有3.14 % 的人关注了爆炸吧知识端午节假期结束了,知识君又可以开心地回到工作岗位上了。我热爱学习,也热爱工作。这两天,知识君又听到了“哼,数学除了摧残我们这些祖国的花朵之外,然而并没有什么卵用。”知识君…

rocketmq 顺序消费_10 分钟看懂消息队列 RocketMQ

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和…

[Tyvj1114 搭建双塔]

[题目来源]:VIjos [关键字]:动态规划 [题目大意]:用n块水晶搭建两个塔,要求双塔必须一样高,问最大能达到的高度为多少。 // [分析]:用f[i,j]表示使用前i个水晶,建起高度差为j的双塔时,较矮的那个塔的最大高…

echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图

有时候我们的图表需要根据后台数据每秒实时更新,那么用echarts应该如何实现呢?2020.11.27发现篇文章很多人关注,但之前写的不是很清楚,今天更新下,大家有问题可以也留言讨论。这是一个仿win10任务管理器的设备信息监控…

linux lua socket编程,CentOs 安装lua,luasocket

一、centos安装Lua3)个人在这里选择使用5.1版本的*下载wget http://www.lua.org/ftp/lua-5.1.5.tar.gz--2013-10-14 16:23:17-- http://www.lua.org/ftp/lua-5.1.5.tar.gzResolving www.lua.org... 89.238.129.35, 2a02:40:41::5Connecting to www.lua.org|89.238.129.35|:80.…

Python 2.7 Tutorial —— 流程控制

.. _tut-morecontrol: ****************************************** More Control Flow Tools 深入流程控制 ****************************************** Besides the :keyword:while statement just introduced, Python knows the usual control flow statements known from …

一厕难求!NASA悬赏三万五千美元,只为一个能在月球上用的马桶

全世界只有3.14 % 的人关注了爆炸吧知识来源:大数据文摘作者:刘俊寰如今逐渐步入智能生活时代,智能化产品也逐渐普及到我们生活中,有的智能马桶,不仅可以识别大便监测你的生活状况,还可以识别肛纹辨别不同身…