DELETE语句与REFERENCE约束“FK_Claims_Patients”冲突

时间:2013-04-14 12:32:57

标签: c# sql-server-2008 foreign-keys

我正在尝试从我的网站上删除一个“人”,但我收到错误,写在帖子标题中,错误指向我这段代码:

Patient patient = db.Patients.Single(p => p.Patient id == id);
db.Patients.Remove(patient);
db.SaveChanges();
return RedirectToAction("Index");

或者,如果可能的话,我如何添加例外,所以当我点击删除按钮时,它会打开另一个页面并告诉我,我没有删除该人的权利。

有什么想法吗?

2 个答案:

答案 0 :(得分:11)

您需要删除所有引用该患者的声明。实现此目的的一种方法是向外键约束添加级联删除,但是,我不知道您正在使用哪个DBMS。

错误消息似乎暗示SQL Server,所以这里是SQL Server的一些信息 - Cascading Referential Integrity Constraints

要根据您的情况修复此问题,您需要执行DROP CONSTRAINT,然后执行ADD CONSTAINT。

ALTER TABLE dbo.Claims
   DROP CONSTRAINT FK_Claims_Patients

ALTER TABLE dbo.Claims
   ADD CONSTRAINT FK_Claims_Patients
   FOREIGN KEY (PatientId) REFERENCES dbo.Patients(PatientId) ON DELETE CASCADE

答案 1 :(得分:0)

Patient patient = db.Patients.Single(p => p.Patient id == id);
patient.Claims.clear();
db.Patients.Remove(patient);
db.SaveChanges();

将删除链接表中的相关项目并允许删除。