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

时间:2019-05-07 20:22:30

标签: c# entity-framework-6 sql-server-2016

我们有两个表,任务和角色,其中任务具有角色的外键。在我们的应用中,我们间歇性地收到此错误:

  

System.Data.Entity.Infrastructure.DbUpdateException:发生错误   在更新条目时。有关详细信息,请参见内部异常。 ->   System.Data.Entity.Core.UpdateException:发生错误   更新条目。有关详细信息,请参见内部异常。 ->   System.Data.SqlClient.SqlException:INSERT语句冲突   具有FOREIGN KEY约束“ FK_tasks_role_id”。冲突   发生在数据库“已编辑”,表“ dbo.roles”,列“ id”中。

作为错误记录/ splunk内容的一部分,我们获得了要保存的数据的序列化对象。当查看对象时,尝试保存的角色ID在dbo.roles表中,因此抛出该错误没有任何意义。

该错误似乎是成批出现的,持续了几秒钟,然后又恢复正常。另外,它会在多个角色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;
}

1 个答案:

答案 0 :(得分:-1)

如果您尝试插入具有错误(丢失)的角色的任务,则会发生此错误。请检查您的数据库是否包含所选角色。ID。