Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有外键的表的DbUpdateConcurrencyException_C#_.net_Entity Framework_Asp.net Web Api_Dbcontext - Fatal编程技术网

C# 具有外键的表的DbUpdateConcurrencyException

C# 具有外键的表的DbUpdateConcurrencyException,c#,.net,entity-framework,asp.net-web-api,dbcontext,C#,.net,Entity Framework,Asp.net Web Api,Dbcontext,更新:啊!哑错误:我有两个可用的存储库实例,我们的实现要求我们为每个Repo提供一个连接字符串,因此这两个Repo指向不同的数据库,我正在从一个数据库添加一个实体到另一个数据库,并且在更新的数据库中可能找不到它的id 我正在运行.NETMVC4.0和EF5。我们实现了一个存储库模式。在WebApi控制器的以下删除方法中,我有以下代码: int userID=UserHelper.GetCurrentUserID; DateTime now=DateTime.UtcNow; ExhibitLink

更新:啊!哑错误:我有两个可用的存储库实例,我们的实现要求我们为每个Repo提供一个连接字符串,因此这两个Repo指向不同的数据库,我正在从一个数据库添加一个实体到另一个数据库,并且在更新的数据库中可能找不到它的id

我正在运行.NETMVC4.0和EF5。我们实现了一个存储库模式。在WebApi控制器的以下删除方法中,我有以下代码:

int userID=UserHelper.GetCurrentUserID; DateTime now=DateTime.UtcNow; ExhibitLinkRepository el=新的ExhibitLinkRepository; el.setCase=案例ID; ExhibitLink=el.All.SingleOrDefaultl=>l.id==id; //标记链接已删除 link.usermodified_id=userID; link.datetimemodified=now; link.deleted_flag=true; exhibitLinkRepository.InsertOrUpdatelink; exhibitLinkRepository.SaveChanges; 其中exhibitLinkRepository.InsertOrUpdate:

公共作废插入更新展商链接展商链接 { 如果exhibitLink.id==defaultint { //新实体 context.ExhibitLinks.AddexhibitLink; } 其他的 { //现有实体 context.EntryexhibitLink.State=EntityState.Modified; } } 当我调用context.SaveChanges时,我得到了可怕的结果:

Store update、insert或delete语句影响了意外的行数0。自加载实体后,实体可能已被修改或删除。刷新ObjectStateManager条目

现在,ExhibitLink表具有如下外键约束:

某些相关表的底层数据库上碰巧存在触发器,但禁用它们并不会改变结果


我就是不明白。有什么想法吗?

这段代码曾经并发运行过吗?当受更新操作影响的行数为零时,会发生异常。update操作的where子句中唯一的内容是记录的ID及其时间戳字段,因此,如果没有行被更新,那一定是因为自上次加载记录以来,该记录已被删除或更新。@Asad,它是一个开发数据库,通常只有我访问此模块,因此访问此表。另外,我们不会从数据库中删除行,只需设置一个删除标志。@Asad,触发器不会引发异常,因为它们会在我的操作之后修改take。正确吗?如果触发器对记录进行了更改,则除非清除缓存并从数据库中重新加载实体,否则您的数据库上下文事后不会知道它。这会导致您的异常,因为缓存在内存中的实体的行版本比触发器更改记录后的旧