我已经覆盖了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();
}
问:有没有其他方法而不是使用GetObjectStateEntries来获取所有实体而不管状态如何?
答案 0 :(得分:1)
EntityState是一个标志枚举,这意味着您可以在调用GetObjectStateEntries时组合多个值,如下所示:
ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged | EntityState.Deleted)
另一方面,由于已删除的实体已标记为已删除,因此无论如何都会将其发送到数据库进行删除,因此我不确定您要对它们执行什么操作。