我有以下两个实体:
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
对象之前正确清除集合?
值得一提的是,我正在尝试避免级联删除。我想删除数据库中的孤立条目。但是,如果最佳解决方案/实践是使用级联删除,我将使用它。
这可能吗?
答案 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();