Asp.net 若表已定义触发器,实体框架将抛出DBUpdateConcurrencyException

Asp.net 若表已定义触发器,实体框架将抛出DBUpdateConcurrencyException,asp.net,sql-server,entity-framework,Asp.net,Sql Server,Entity Framework,在ASP.NET中使用实体框架和SQL Server 2014作为数据库引擎支持RESTful服务时,我遇到了一些意想不到的障碍 我准备了一些虚拟案例,准确地解释了我现在面临的问题 我在SQL Server中有一个名为dummy_database的数据库。它只包含一个表Person和一个触发器TR_Person_Insert,在将记录添加到Person表之前,TR_Person_Insert负责将当前日期和时间的一些额外数据添加到每个记录中。数据库结构代码如下: 使用虚拟数据库; 去 如果存在,

在ASP.NET中使用实体框架和SQL Server 2014作为数据库引擎支持RESTful服务时,我遇到了一些意想不到的障碍

我准备了一些虚拟案例,准确地解释了我现在面临的问题

我在SQL Server中有一个名为dummy_database的数据库。它只包含一个表Person和一个触发器TR_Person_Insert,在将记录添加到Person表之前,TR_Person_Insert负责将当前日期和时间的一些额外数据添加到每个记录中。数据库结构代码如下:

使用虚拟数据库; 去 如果存在,请从sys.tables中选择*,其中的名称类似于“person” 放下桌子[人]; 去 如果存在,请从sys.triggers中选择*名称,如“TR\u Person\u Insert” 下拉触发器[TR_Person_Insert]; 去 创建表[dbo].[person] [id]内部标识1,1, [名称]NVARCHAR256不为空, [姓氏]NVARCHAR256非空, [age]INT不为空, [生效日期]日期时间2 7, 约束PK\u Person\u ID主键[ID] 去 在[dbo].[Person]上创建触发器TR_Person_Insert 而不是插入 像 开始 插入[dbo]。[个人][姓名],[姓氏],[年龄],[有效日期] 选择i.[姓名]、i.[姓氏]、i.[年龄]、GETDATE 从插入i 终止 去 然后,我使用ASP.NET创建了虚拟RESTful服务,并使用数据库优先的方法添加了实体框架。该服务的唯一现有方法的代码如下:

An exception of type 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' occurred in EntityFramework.dll but was not handled in user code

Additional information: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.
[路由refixapi/人] 公共类DummyController:ApiController { [HttpPost,路线] public IHttpActionResult AddPersonPersonDto数据 { 使用var ctx=新的DummyDatabaseModel { var person=新的人 { name=data.name, 姓氏=数据。姓氏, 年龄=数据。年龄 }; ctx.people.Addperson; ctx.SaveChanges; } 返回Ok; } } 问题在于保存对数据库上下文调用的更改方法。此方法引发DBUpdateConcurrencyException异常,附加信息如下:

An exception of type 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' occurred in EntityFramework.dll but was not handled in user code

Additional information: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.
我知道这个异常是由触发器引起的,触发器被激发而不是数据库端的常规“插入”例程

我要问的问题是——如何在不放弃数据库中的触发器的情况下消除这种异常。坦率地说,我没有主意了——如果你过去也遇到过同样的问题,我指望你的建议或解决方案


谢谢您的帮助。

如果您只想存储插入日期,您可以在该字段中输入默认值getdate,然后在insert语句的列中忽略它。但是,这是一个没有触发器的解决方案,你不需要它。这只是一个带有datetime值的示例,我更愿意保留整个“触发器”的概念,因为我不仅在插入操作中使用它们,而且在更新和删除操作中也使用它们。你可以执行一个真正的插入触发器,并在其中为所有插入的记录执行update语句。