实体框架中的SaveChanges插入语句外键错误

时间:2011-10-17 14:27:18

标签: c# entity-framework

我有一个属性对象,我想从最新的存储库集合中删除它。或者我可以说在保存到数据库之前将其分离。有一个Property表是主要的,历史记录和详细信息表通过共享Property作为关键字与PropertyId相关联。当我从存储库中分离对象并尝试保存它时,会导致错误。

这样做。

Repository.Detach(P);

错误

Repository.SaveChanges();

错误:

  

INSERT语句与FOREIGN KEY约束“FK_History_Property”冲突。
  冲突发生在数据库“database”,表“dbo.Property”,列'PropertyId'中   声明已经终止。

2 个答案:

答案 0 :(得分:1)

在删除记录之前,尝试从其他表中删除引用您要删除的记录的主键的记录。

例如:

交易表

TransactionID DateOfTransaction CustomerID
1             11/15/11          1
2             11/15/11          2
3             11/15/11          15
4             11/15/11          3

交易明细

TransactionDetailID TransactionID ItemID Quatity
1                   1             43     15
2                   1             32      2
3                   2             43     89
4                   4             32     12

TransactionID这里是一个外键(来自其他表的主键)。在删除事务表上的父记录之前,必须首先删除引用其PrimaryKey的所有记录,以避免 FOREIGN KEY CONSTRAINT ERRORS

例如:

如果要从数据库中删除事务1,则必须先删除事务详细信息(事务详细信息1和2),然后才能删除transactionID 1

答案 1 :(得分:0)

我认为你的意思是使用

Repository.DeleteObject(P);

接着是

ObjectContext.SaveChanges();

当然,假设您正在使用支持DbContext模型的EntityFramework的某些更高版本。

在早期版本中,可以通过执行类似

之类的操作在存储库级别或ObjectContext级别进行存储库修改
ObjectContext.DeleteObject(P);

接着是

ObjectContext.SaveChanges();