在我的项目中,我不使用物理删除,我只是对所有表使用逻辑“软删除”。

我将此子句用于所有查询:

.Where(row => row.IsDeleted == false)

我想要一种避免在所有查询中重复此 where 子句的方法。

我有这样的方法来获取数据:
public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
{
    return base.Set<TEntity>();
}

我这样称呼它:
_categories = _uow.Set<Category>();

我怎样才能做到这一点 ?

第一个想法:

添加一个基类并将 Deleted 列放在其中并从该基类继承所有类。这是一个好方法吗?

我使用 UnitOfWork 和 code-first。

最佳答案

我不会仅仅为了重用单个属性而创建基类。相反,我会创建一个接口(interface)和一个扩展方法来封装和重用 where 语句。类似于以下内容:

public static class EntityFrameworkExtentions
{
    public static ObservableCollection<TEntity> Alive<TEntity>(this DbSet<TEntity> set)
        where TEntity : class, ISoftDeleteAware
    {
        var data = set.Where(e => e.IsDeleted == false);
        return new ObservableCollection<TEntity>(data);
    }
}

接口(interface)声明
public interface ISoftDeleteAware
{
    bool IsDeleted { get;set;}
}

用法:
var coll = DbContext.Categories.Alive();

关于asp.net-mvc - 如何避免在 Entity Framework 中重复相同的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35113000/

10-11 00:01