C# 是否有一种方法可以获取实体框架中SaveChanges方法中的所有实体 我正在尝试标记要删除的对象

C# 是否有一种方法可以获取实体框架中SaveChanges方法中的所有实体 我正在尝试标记要删除的对象,c#,entity-framework,entity-framework-4.1,C#,Entity Framework,Entity Framework 4.1,我已经重写了Savechnages方法,希望获取所有实体,而不管它们的状态如何。下面的代码取自一个网站,问题是那些属性没有改变,只是标记为删除的对象不会出现 public override int SaveChanges(SaveOptions options) { var deletedEntities = __getDeletedEntities(); _softDelete(deletedEntities); return base.SaveChanges(opti

我已经重写了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();
public覆盖int SaveChanges(SaveOptions)
{
var deletedEntities=uu getDeletedEntities();
_软删除(删除身份);
返回基本值。保存更改(选项);
}
私有列表\uuu getDeletedEntities()
{
返回ObjectStateManager
.GetObjectStateEntries(EntityState.Unchanged)
.Select(entry=>entry.Entity)
第()类
.其中(e=>e.IsDeleted)
.ToList();
}


问:除了使用GetObjectStateEntries之外,还有其他方法可以获取所有实体,而不考虑状态吗?

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

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

另一方面,由于已删除的实体已标记为已删除,它们将被发送到数据库进行删除,因此我不确定您将如何处理它们。

Pawel。我尝试了很多方法来实现软删除,最后放弃了并进行了物理删除。我的BLL对象具有IsDeleted属性,因为数据库没有IsDeleted列,所以我在POCO类上实现了和接口,以了解对象是否已被删除。我不希望BLL引用ObjectContext并调用DeleteObject方法。因此,BLL只是将POCO对象标记为删除,然后在SaveChanges方法中,我检测到该标记并显式调用这些对象上的DeleteObject。@BrikeshKumar只是出于兴趣,为什么您要“重新创建轮子”尝试手动删除对象?这不是ORM的责任吗?另一方面,如果您不使用“文明”的产品,为什么不使用普通的老SQL?@Oybek是的,这是OR/M的责任。我不想让它变魔术,让我无法控制。我浪费了几天时间试图学习使用EF的软删除,这么简单的事情。要么我疯了,无法学习,要么只有EF团队的一些禅宗才能理解。无论如何,我更喜欢使用iBatis.Net,是的,它会让我完全控制SQL。@BrikeshKumar你能告诉我们你所说的“软删除”到底是什么意思吗?这是否意味着删除对象而不首先检索它们或其他东西?