我正在使用.NET 4.0和SQL Server 2008的实体框架。
我有两个实体A
和B
,A
有很多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:
并尝试将FK设置为ON DELETE CASCADE
。但显然它仍有问题。
我不想获取父实体(B
)的每个该死的子实体(A
)并单独删除它们。与执行单个SQL查询相比,这太贵了。
答案 0 :(得分:4)
您需要做的是:
第一步将确保如果未加载相关实体,则级联删除将起作用;第二步将确保在加载相关实体时级联删除删除将起作用。这两个步骤都是必要的。
完成此操作后,您无需加载相关实体并逐个删除它们。
答案 1 :(得分:0)
确保您的实体模型与数据库模型同步。每次更改数据库(从数据库更新模型)时刷新实体模型,否则可能会出现意外异常。
答案 2 :(得分:0)
OnDelete
至Cascade
model.edmx.sql
重新创建数据库