EntityFramework:如何从查询中排除已删除的对象

Gar*_*wen 5 entity-framework

以下代码演示了实体框架存在的问题。假设“ bob”在会话表中有很多记录。

我希望sessionCountB比sessionCountA小1:

using (var context = new MyEFContext)
{
   int sessionCountA = (from a in context.sessions 
                        where a.user = 'bob' select a).Count();

   sessions firstSession = (from a in context.sessions
                                  where a.user = 'bob').FirstOrDefault();

   context.sessions.DeleteObject(firstSession);

   int sessionCountB = (from a in context.sessions 
                        where a.user = 'bob' select a).Count();

    // I expect sessionCountB == sessionCountA - 1
}
Run Code Online (Sandbox Code Playgroud)

我知道DeleteObject仅标记要删除的对象-SaveChanges在数据库上进行删除。

但是在调用SaveChanges之前,是否不应该从我对同一数据模型执行的其他查询中排除已删除的对象吗?

ari*_*its 3

解决方案

  1. 如果您不想看到处于已删除状态的实体,只需显式过滤它们

_context.sessions.Where(a => _context.Entry(a).State != EntityState.Deleted);

  1. var x = _context.Accounts从数据库 加载集合()后获取“本地”集合,y = x.Local将过滤具有已删除状态的实体。注意 - 如果没有,Local您也不会在从数据库加载的集合中看到新添加的实体。 很好的例子和解释