删除实体框架中的FK约束的父实体& SQL Server

时间:2011-07-06 01:11:50

标签: sql-server entity-framework

我正在使用.NET 4.0和SQL Server 2008的实体框架。

我有两个实体ABA有很多B个(a表上有B个字段,即B - >多对一 - > A)。当我尝试删除特定的父实体A时,查询失败

  

A是父实体,B是子实体。

以下是我用于删除特定A实体的代码: -

var obj = (from A in context.As where A.id=someValue select A).First();
context.As.DeleteObject(obj);
context.SaveChanges();

然而它抛出了着名的异常

  

DELETE语句与REFERENCE约束“FK_bs_as”冲突。冲突发生在数据库“myDb”,表“dbo.bs”,列“a”。

     

声明已经终止。

然后我使用SQL Server Management Studio查看了外键约束,并按如下方式编辑了FK:

  • 删除规则:cascade
  • 更新规则:级联
  • 强制执行外键约束:否

并尝试将FK设置为​​ON DELETE CASCADE。但显然它仍有问题。

我不想获取父实体(B)的每个该死的子实体(A)并单独删除它们。与执行单个SQL查询相比,这太贵了。

3 个答案:

答案 0 :(得分:4)

您需要做的是:

  • 像您一样在数据库中设置删除规则(不要设置更新规则,也不要更改强制约束!)
  • 设置关于EDMX中关系的删除规则

第一步将确保如果未加载相关实体,则级联删除将起作用;第二步将确保在加载相关实体时级联删除删除将起作用。这两个步骤都是必要的。

完成此操作后,您无需加载相关实体并逐个删除它们。

答案 1 :(得分:0)

确保您的实体模型与数据库模型同步。每次更改数据库(从数据库更新模型)时刷新实体模型,否则可能会出现意外异常。

答案 2 :(得分:0)

  • 在EDMX中设置A与B之间的关联OnDeleteCascade
  • 从模型生成数据库
  • 使用新的model.edmx.sql重新创建数据库
  • 使用您的数据填充数据库
  • 再试一次
相关问题