c# - 删除 EF 核心 (SQL Server) 中的级联树
问题描述
我有以下代码:
public class A
{
public Guid Id { get; set; }
public List<A> AList { get; set; }
}
使用流利的 Api 配置:
modelBuilder
.Entity<A>()
.HasMany(x => x.AList)
.WithOne()
.OnDelete(DeleteBehavior.Cascade);
创建迁移工作正常,但在执行“更新数据库”时出现以下错误:
“在表 'A' 上引入 FOREIGN KEY 约束 'FK_A_A_AId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。请参阅以前的错误。 "
那么如何删除 EF Core 中的级联树呢?
解决方案
你不能“自动”级联删除;您必须递归地删除客户端代码中的子记录或使用递归 CTE 在数据库中创建INSTEAD OF DELETE
触发器以查询和删除所有子记录
SO回答递归删除客户端代码中的孩子:
所以触发器的答案:
或者,将触发器逻辑实现为存储过程,并将 EFCore 配置为使用该存储过程进行删除(不是像 EF6 这样的内置功能,MapToStoredProcedures
因此需要付出一些努力:
推荐阅读
- python-3.x - 二叉搜索树获得 AttributeError 的主要乐趣:'BTreeWordFinder' 对象没有属性 'showDepth'
- c - 将录制的声音发送到云端
- sql-server - SSIS EncryptSensitiveWithUserKey 和有关包执行的文档
- csv - 将带有日期时间的 CSV 文件正确导入 SAS
- android - 如何修复“无法创建 com.example.todolist.ui.task.TaskViewModel 类的实例”
- django - 'poll_extras' 不是注册的标签库。但是我已经注册了
- amazon-web-services - 将标签/名称添加到 ECS 通过 Terraform 部署的 EC2 实例
- excel-charts - 如何使用记分牌中的数据创建折线图?
- mysql - 数据库表不更新
- javascript - 如何将json文件连接到nodejs进行排序