Вы можете сделать это, если хотите.Однако вы можете получить громоздкую реализацию репозитория.Вы говорите, что хотите избежать определения одного класса репозитория для каждого объекта модели.Это еще одна крайность, которую я бы не рекомендовал.Обычно есть лучшее среднее положение.
Существует книга под названием Domain Driven Design.Одна из рекомендаций - попробовать использовать репозитории «Aggregate Root».Здесь вы объединяете свои сущности в группы в соответствии с их отношениями, а затем создаете один репозиторий для каждой группы.Основная сущность в хранилище упоминается как «совокупный корень» группы и имеет другие сущности, «свисающие» с нее.
Например, скажем, у вас есть сущность Order, которая имеет коллекцию сущностей LineItem.В действительности вы можете получить доступ только к позициям через заказ, поэтому вам не нужен отдельный LineItemRepository.Вы можете запросить заказ, и лениво загружать позиции.В таком случае Заказ может иметь свойство навигации для сущности CustomerAccount, которая имеет коллекцию сущностей PaymentProfile.Опять же, тот же шаблон - вы просто создаете репо для учетной записи клиента и никогда не запрашиваете PaymentProfile напрямую.Запросите его через CustomerAccount.
Также я знаю по одному из ваших предыдущих вопросов, что вы используете EF.EF управляет транзакциями для вас.Каждый раз, когда вы вызываете SaveChanges, EF запускает его в транзакции.Таким образом, # 2 на самом деле не является хорошей причиной иметь 1 гигантский репозиторий.
Обновление
Что касается UnitOfWork, с хорошим предварительным дизайном, вы можете управлять UoW через репозиториидовольно легкоКаждый из наших репозиториев имеет объект UnitOfWork (который в основном оборачивает EF DbContext).Ни один из нашего кода не создает объект напрямую.Вместо этого мы используем наш контейнер Inpension Inversion of Control (Microsoft Unity) для автоматического создания UoW каждый раз, когда репозиторий создается контроллером (опять же, с использованием внедрения зависимостей).
Конфигурируя время жизни зависимости как один экземпляр для каждого запроса, мы можем быть уверены, что по крайней мере в нашем проекте MVC каждый репозиторий получит один и тот же экземпляр UoW (и, следовательно, все репозитории имеют один и тот же экземпляр DbContext).
<register type="IUnitOfWork" mapTo="CustomDbContext">
<lifetime type="singleton-per-http-context" />
</register>