实体框架参照完整性未被强制执行

时间:2014-12-09 12:09:48

标签: sql-server database entity-framework

使用EF6,我在SQL数据库中有两个表,我首先使用数据库从数据库创建EF图。

我的数据库缺少一个表的PK和另一个表中的外键之间的外键约束。

我没有将外键约束添加到数据库中,而是将其创建为EF模型中的关联。

该关联在EF模型中看起来很好,它具有正确的主体和依赖。

但是,如果我在依赖项存在时从主表中删除了一行,则引用完整性不会启动,主要行也会被删除。

我知道我可以将关系添加到SQL数据库并从数据库更新模型。但是我想了解EF的功能范围,是否应该可以在EF模型中添加关系但不能在SQL数据库中添加关系,并且它仍然可以工作?

在我看来,如果关联(关系)存在于EF但不存在于MSSQL中,那么当您通过EF删除行时,关联会被忽略以引用完整性吗?

1 个答案:

答案 0 :(得分:0)

  

但是,如果我在依赖项存在时从主表中删除了一行,则引用完整性不会启动,主要行也会被删除。

依赖项存在于数据库中,还是存在于上下文中?

如果您尚未在上下文中加载所有依赖实体,则EF无法删除它们。它需要它们的删除语句的键。如果它们不在上下文中,它甚至不知道它们存在。

因此,引用完整性的唯一方法是,如果EF在删除主体实体时将所有相关实体检索到上下文中,那么它可以为每个实体发出一个删除语句(即使有数千个)

我认为,如果上下文中存在依赖实体,EF无论如何都会发出删除语句(即使它希望db完成所有工作)。

希望它有所帮助。