删除包含DbSet对象的DbSet对象

时间:2014-07-28 09:18:04

标签: c# list asp.net-mvc-5 dbset

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

  

DELETE语句与REFERENCE约束冲突&#34; FK_dbo.MapLocations_dbo.MapCompanies_MapCompany_Id&#34;。冲突发生在数据库&#34; TestDatabase&#34;,table&#34; dbo.MapLocations&#34;,column&#39; MapCompany_Id&#39;。
      声明已经终止。

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

1 个答案:

答案 0 :(得分:0)

<强>手册

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

级联删除

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

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

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

以下是关于级联删除的优缺点的良好讨论:What are the Pros and Cons of Cascading delete and updates?