Я добиваюсь сокращения кода, вынесением общих действий в предка. Во всех встреченных мною примерах создавался репозиторий, но он играл роль интерфейса — все методы во всех потомках приходилось заново реализовывать.
В PHP можно было бы сделать примерно так:
public class BaseDBProxy
{
protected SiteContext db = new SiteContext();
protected $class_name="Problems";
public GetById(int id)
{
return db.$class_name.Where(e => e.Id == id).FirstOrDefault<$class_name>();
}
}
Т.е., передать имя класса строкой и далее таки получить то, что нужно мне — сокращение кода и возможность достаточно просто переписать общие методы при переходе на другую библиотеку доступа к базе, а то и к другой БД.
Статью посмотрел, есть над чем подумать (не с решением этой задачи, а с постановкой задачи вообще).