有没有办法在Entity Framework中获取SaveChanges方法中的所有实体

时间:2012-01-26 19:12:26

标签: c# entity-framework entity-framework-4.1

  1. 我正在尝试标记要删除的对象。
  2. 我已经覆盖了Savechnages方法,并希望获得所有实体,无论其状态如何。下面的代码来自一个站点,问题是其属性尚未更改的对象,并且只是标记为删除不会显示。

    public override int SaveChanges(SaveOptions options)
    {
        var deletedEntities = __getDeletedEntities();
        _softDelete(deletedEntities);
        return base.SaveChanges(options);
    }
    
    private List<ISoftDelete> __getDeletedEntities()
    {
    
       return ObjectStateManager
                 .GetObjectStateEntries(EntityState.Unchanged)
                        .Select(entry => entry.Entity)
                        .OfType<ISoftDelete>()
                        .Where(e => e.IsDeleted)
                        .ToList();
    

    }

  3. 问:有没有其他方法而不是使用GetObjectStateEntries来获取所有实体而不管状态如何?

1 个答案:

答案 0 :(得分:1)

EntityState是一个标志枚举,这意味着您可以在调用GetObjectStateEntries时组合多个值,如下所示:

ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged | EntityState.Deleted)

另一方面,由于已删除的实体已标记为已删除,因此无论如何都会将其发送到数据库进行删除,因此我不确定您要对它们执行什么操作。