0

我编写了一个 C# MVC5 互联网应用程序,其中我有一个MapCompany具有List<MapLocation>. 我有一个DbSet<MapCompany>和一个DbSet<MapLocation>。当我在尝试删除MapCompany对象时调用删除操作结果时,我收到以下错误:

DELETE 语句与 REFERENCE 约束“FK_dbo.MapLocations_dbo.MapCompanies_MapCompany_Id”冲突。冲突发生在数据库“TestDatabase”、表“dbo.MapLocations”、列“MapCompany_Id”中。
该语句已终止。

MapLocations删除对象时是否需要删除所有关联MapCompany?如果是这样,最简单的方法是什么?有没有一种更简单/更好的方法,而不是遍历每个对象并手动删除每个对象?此外,在未来阶段,每个MapLocation都会有许多MapLocationItem对象。

4

1 回答 1

0

手动的

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

级联删除

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

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MapCompany>()
        .HasOptional(a => a.MapLocations)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
}

这是关于级联删除的优缺点的一个很好的讨论:级联删除和更新的优点和缺点是什么?

于 2014-07-28T09:20:54.397 回答