我编写了一个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
个对象。
答案 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?