以下代码演示了我在使用 Entity Framework 时遇到的问题。假设“bob”在 session 表中有许多记录。
我预计 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
}
我知道DeleteObject仅标记要删除的对象 - SaveChanges在数据库上进行删除。
但是,在调用 SaveChanges 之前,是否应该将已删除的对象排除在我对同一数据模型执行的进一步查询之外?
最佳答案
解决方案
- 如果您不想看到处于已删除状态的实体,只需显式过滤它们
_context.sessions.Where(a => _context.Entry(a).State != EntityState.Deleted);
- 从数据库加载集合 (
var x = _context.Accounts
) 后获取“本地”集合,y = x.Local
将过滤具有已删除状态的实体。 注意 - 如果没有Local
,您也不会在从数据库加载的集合中看到新添加的实体。 great example and explanation
关于entity-framework - Entity Framework : How to exclude deleted objects from Queries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614361/