entity-framework - Entity Framework : How to exclude deleted objects from Queries

标签 entity-framework

以下代码演示了我在使用 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 之前,是否应该将已删除的对象排除在我对同一数据模型执行的进一步查询之外?

最佳答案

解决方案

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

_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/

    相关文章:

    entity-framework - Entity Framework 不获取链接表

    entity-framework - 将 ESQL 转换为 LINQ 到实体。按相关实体排序

    mysql - Entity Framework 、mysql 和 IQueryable

    c# - 如何使用 IQueryable 填充 dataGridView

    c# - WPF MVVM 中 Entity Framework 的免费数据库

    c# - 如何将数据传递给 Controller ​​-一对多关系.net core

    entity-framework - 在 ExecuteStoreQuery EF 中执行存储过程。这是 EF 中的错误吗?

    c# - MVC 通用存储库过滤

    asp.net - ADO.NET Entity Framework 或 ADO.NET

    c# - 测试时尝试将 C# 代码与底层数据库隔离可以得到什么好处?