Я решил это, сделав это в своем общем репозитории, я также создал репозиторий только для чтения для сущностей, у которых нет isDeleted (они вообще не управляются приложением, только чтение), репо только для чтения получает все записи
Простое хранилище наследует только для чтения и переопределяет методы, которые не должны возвращать объекты, помеченные 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();
}
}
это решение немного специфично для моего случая, но, надеюсь, вы можете получить некоторые идеи из него