移除后,EF实体仍是父集合的一部分

时间:2019-07-16 19:16:13

标签: c# .net-core entity-framework-core

我有一个带有Entity Framework Core 2.2.4的.NET Core 2.2项目。

我想执行以下操作:

  1. 列出项目
  2. 删除实体(dbset.remove
  3. 检查父母的孩子数(现在已减少,但已减少)
  4. 做更多无关的事情
  5. 在通话结束时致电.SaveChanges()

我的问题是这样的:在第2步中,我得到的项目计数没有考虑到我刚刚删除了其中一项。我不明白为什么,因为我认为变更跟踪应该可以完成工作,因为知道其中有一项已删除(即使未保存到数据库中也是如此)。

我在整个项目中使用_ctx作为数据库上下文。

public class Transaktion
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int Id { get; set; }

   public ICollection<TransPosition> Positionen { get; set; }
        = new List<TransPosition>();
}

public class TransPosition
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    [ForeignKey("TransaktionId")]
    public Transaktion Transaktion { get; set; }
    public int TransaktionId { get; set; }
}

Transaktion t = _ctx.Transaktionen.Find(entity.TransaktionId);
int counter = t.TransPositionen.Count();
//counter = 8

TransPosition pos = _dbSet.Find(Id);
_dbSet.Remove(pos);

Transaktion t = _ctx.Transaktionen.Find(entity.TransaktionId);
counter = t.TransPositionen.Count();
//STILL a count of 8

我本来希望得到7的数字,因为Find应该具有一个已删除实体的信息。

我对此有误解吗(显然是的)?

1 个答案:

答案 0 :(得分:0)

您如何在第2步获得计数?因为在调用SaveChanges()之前,不会提交任何内容。更改跟踪程序所做的全部工作就是跟踪更改(即,将实体标记为已删除),以便在进行SaveChanges()调用时,它知道如何处理。