在我的项目中,我不使用物理删除,我只是对所有表使用逻辑“软删除”。
我将此子句用于所有查询:
.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/