【问题标题】:Ignore all entities with a IsDeleted flag-column set忽略具有 IsDeleted 标志列集的所有实体
【发布时间】:2014-11-14 07:24:23
【问题描述】:

我们的产品有一个 IsDeleted 标志,因此产品在删除时会保留在数据库中。 (它们只是被标记为已删除)

在查询服务器时总是检查已删除标志很烦人(其中 c.IsDeleted == False && ...)。有没有办法集中这个?在 DbContainer / Context 还是其他地方?

【问题讨论】:

  • 您可以创建一个接口并将其应用于您的实体,因此您可以以通用方式过滤它们。但是,这不适用于子实体,您要么必须通过反射构建表达式以构建正确的查询,要么从内存中删除已删除的子实体。
  • 我在这里发布了一个实体框架的软删除解决方案stackoverflow.com/a/18985828/150342
  • 另一个选项是 DevForce EntityServerQueryInterceptor 使用 EntityQueryFilterCollection
  • 谢谢 Kim,这就是我要找的东西 :)

标签: c# entity-framework devforce


【解决方案1】:

另一种解决方案是使用扩展方法。这不会完全集中,但会封装。

public static IQueryable<T> Undeleted(this IQueryable<T> queryable)
    where T : ISoftDeletable
{
    return queryable.Where(x => !x.IsDeleted);
}

界面:

public interface ISoftDeletable
{
    bool IsDeleted { get; }
}

用法:

var undeleteds = myEntitySet.Undeleted().ToArray();

【讨论】:

  • 这是一个选项,但正如你所说,我每次构建查询时仍然必须使用它:)
猜你喜欢
  • 1970-01-01
  • 2015-07-02
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多