C# 相关表中存在数据时引发外键约束错误

C# 相关表中存在数据时引发外键约束错误,c#,entity-framework-6,sql-server-2016,C#,Entity Framework 6,Sql Server 2016,我们有两个表,tasks和roles,其中tasks具有角色的外键。在我们的应用程序中,我们间歇性地出现以下错误: System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参见内部异常。--> System.Data.Entity.Core.UpdateException:运行时出错 更新条目。有关详细信息,请参见内部异常。--> System.Data.SqlClient.SqlException:INSE

我们有两个表,tasks和roles,其中tasks具有角色的外键。在我们的应用程序中,我们间歇性地出现以下错误:

System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参见内部异常。--> System.Data.Entity.Core.UpdateException:运行时出错 更新条目。有关详细信息,请参见内部异常。--> System.Data.SqlClient.SqlException:INSERT语句冲突 使用外键约束FK_任务\u角色\u id。冲突 发生在数据库编辑表dbo.roles的“id”列中


作为错误日志记录/splunk工作的一部分,我们将获得一个要保存的数据的序列化对象。查看对象时,dbo.roles表中存在试图保存的角色id,因此抛出此错误没有意义

错误似乎是成批出现的,发生了几秒钟,然后又恢复正常。此外,它发生在多个角色id上,所有这些id都存在于角色表中

EF6中是否有其他东西可能导致抛出此错误

我检查过的其他事项:

表和代码之间的数据类型匹配 没有级联更新或删除 没有触发器 为约束创建脚本

ALTER TABLE [dbo].[tasks]  WITH CHECK ADD  CONSTRAINT [FK_tasks_role_id] FOREIGN KEY([role_id])
REFERENCES [dbo].[roles] ([id])
GO

ALTER TABLE [dbo].[tasks] CHECK CONSTRAINT [FK_tasks_role_id]
GO
EF代码:

 public int InsertTask(Task task)
{
    var newTask = new task();
    newTask.role_id = task.Role.Id;
    newTask.name = task.Name;

    _dbEntities.tasks.Add(newTask);
    _dbEntities.SaveChanges();  

    return newTask.id;
}

如果尝试插入缺少错误角色Id的任务,则会发生此错误。请查收,如果您的数据库包含所选角色.Id.

约束FK\u tasks\u role\u Id是什么意思?@Hogan我已将约束的代码添加到问题中,您是否可以发布一张代码图片,显示您如何获得此异常?@YairI已添加该约束是否确定task.role.Id中的值有效?查看对象时,试图保存的角色id存在于dbo.roles表中,因此抛出此错误没有意义。-从我的问题来看,对不起,我没有读这个。在这种情况下,通过事务不可读的数据行和死锁自愈系统锁定的行可能会出现问题。在我们遇到此问题的时间段内,查看服务器的SentryOne显示没有阻塞、死锁和长时间运行的查询。