所有表都有一个位字段IsDeleted
有没有办法告诉EF在进行查询时不要考虑它们。
或者我必须每次都像Where(o => o.IsDeleted != true)
(首先使用EF4 CTP5代码)
答案 0 :(得分:0)
我通过在我的通用存储库中执行此操作解决了这个问题,我还为没有isDeleted的实体创建了一个只读存储库(它们根本不是由应用程序管理,只是阅读),readonly repo获取所有记录
简单repo继承readonly并重写不应返回标记为isDeleted = false的实体的方法;
应该只标记为IsDeleted = true的实体继承自DelEntity
public class DelEntity : Entity, IDel
{
public bool IsDeleted { get; set; }
}
我的通用存储库:
public class Repo<T> : ReadRepo<T>, IRepo<T> where T : DelEntity, new()
{
public Repo(IDbContextFactory a) : base(a)
{
}
...
public override IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
{
return c.Set<T>().Where(predicate).Where(o => o.IsDeleted == false);
}
public override IEnumerable<T> GetAll()
{
return c.Set<T>().Where(o => o.IsDeleted == false);
}
}
我的只读操作存储库
public class ReadRepo<T> : IReadRepo<T> where T : Entity, new()
{
protected readonly DbContext c;
public ReadRepo(IDbContextFactory f)
{
c = f.GetContext();
}
public T Get(long id)
{
return c.Set<T>().Find(id);
}
public virtual IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
{
return c.Set<T>().Where(predicate);
}
public virtual IEnumerable<T> GetAll()
{
return c.Set<T>();
}
public int Count()
{
return c.Set<T>().Count();
}
}
这个解决方案对我的情况有点具体,但希望你可以从中得到一些想法