实体框架导航集合属性删除

时间:2016-09-02 19:48:04

标签: c# entity-framework-6

我有以下两个实体:

public class FirstEntity
{
    public int Id { get; set; }

    public ICollection<SecondEntity> SecondEntityCollection { get; set; }
}

public class SecondEntity
{
    [Key]
    [Column(Order = 0)]
    public int FirstEntitySomeId { get; set; }

    [Key]
    [Column(Order = 1)]
    public int SecondEntityId { get; set; }
}

我的ModelBuilder设置如下

modelBuilder.Entity<FirstEntity>()
            .HasMany(x => x.SecondEntity)
            .WithRequired()
            .HasForeignKey(x => x.FirstEntitySomeId);

删除FirstEntity对象时,我会执行以下操作:

var firstEntity=this.context.FirstEntities.Where(x=>x.Id==someId);
firstEntity.SecondEntityCollection.Clear();
this.context.FirstEntities.Remove(firstEntity);
this.context.SaveChanges();

但是我仍然遇到以下异常:

  

DELETE语句与REFERENCE约束冲突&#34; ....&#34;。冲突发生在数据库&#34;数据库&#34;,表&#34; dbo.SecondEntity&#34;,列&#39; FirstEntitySomeId&#39;。

如何在删除firstEntity对象之前正确清除集合?

值得一提的是,我正在尝试避免级联删除。我想删除数据库中的孤立条目。但是,如果最佳解决方案/实践是使用级联删除,我将使用它。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试如下所示。

var firstEntity=this.context.FirstEntities
                       .Where(x=>x.Id==someId)
                       .Include(s => s.SecondEntityCollection);

this.context.FirstEntities.Remove(firstEntity);

foreach (var s in firstEntity.SecondEntityCollection.ToList())
  {
     this.context.SecondEntityCollection.Remove(s);
  }

this.context.SaveChanges();