Интерфейс репозитория должен работать только с объектами бизнеса / домена , то есть репозиторий отправляет и получает только объекты, известные приложению, объекты, которые не связаны с базовой реализацией доступа с постоянным доступом.
Объекты EF или Nhibernate моделируют постоянные данные НЕ доменные данные.Таким образом, IRepository не должен возвращать объект, который является деталью реализации ORM, но объект, который может использоваться приложением напрямую (либо объект домена, либо упрощенная модель представления, в зависимости от операции).
В реализации репозитория вы имеете дело с сущностями ORM, которые будут сопоставлены с соответствующими сущностями приложения (обычно с таким сопоставителем, как AutoMapper).Короче говоря, при разработке IRepository забудьте все о его реализации.Вот почему лучше спроектировать интерфейс, прежде чем решить, будет ли / какой ORM использоваться.
По сути, хранилище является шлюзом между контекстом домена приложения и контекстом сохраняемости, и приложение НЕ ДОЛЖНО быть связано с реализацией.детали хранилища.