删除包含DbSet对象的DbSet对象

本文关键字:对象 DbSet 包含 删除 | 更新日期: 2023-09-27 18:15:15

我已经编写了一个c# MVC5互联网应用程序,其中我有一个具有List<MapLocation>MapCompany对象。我有一个DbSet<MapCompany>和一个DbSet<MapLocation>。当我在试图删除MapCompany对象时调用Delete Action结果时,我得到以下错误:

DELETE语句与REFERENCE约束"FK_dbo.MapLocations_dbo.MapCompanies_MapCompany_Id"冲突。冲突发生在数据库"TestDatabase",表"dbo"。"MapLocations",列"MapCompany_Id"。
语句已被终止。

在删除MapCompany对象时,我需要删除所有相关的MapLocations吗?如果有,最简单的方法是什么?是否有一个更简单/更好的方法,而不是通过每个对象循环,并手动删除每个对象?而且,在将来的阶段,每个MapLocation将有许多MapLocationItem对象。

删除包含DbSet对象的DbSet对象

手册

手动删除条目。这有时是首选选项,因为它可以让您完全控制。

级联删除

可以设置外键关系为级联删除。这意味着删除父记录将删除引用它的表中的所有记录。要在表上启用级联删除,请阅读此回答。

或者,如果您使用代码优先开发,您可以使用fluent API启用级联删除:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MapCompany>()
        .HasOptional(a => a.MapLocations)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
}
这里有一个关于级联删除的优点和缺点的很好的讨论:级联删除和更新的优点和缺点是什么?