Так что моих знаний не хватало. Я не знал, что вы могли бы создавать универсальные методы (в отличие от универсальных классов). Поэтому я добавил некоторые стандартные методы по умолчанию к фасаду. Вот так:
public static List<T> GetAll<T>() where T : class
{
using (var unitOfWork = new UnitOfWork())
{
return unitOfWork.context.Set<T>().ToList();
}
}
public static T GetSingleOrDefault<T>(Expression<Func<T, bool>> predicate) where T : class
{
using (var unitOfWork = new UnitOfWork())
{
return unitOfWork.context.Set<T>().SingleOrDefault(predicate);
}
}
Обратите внимание, что он пропускает репозитории. Для меня это нормально, так как методы, определенные в репозиториях, более сложны и никогда не понадобятся напрямую из внешнего интерфейса.
Надеюсь, это поможет кому-нибудь в будущем.