У меня есть приложение, созданное с использованием Fluent NHibernate и ASP.NET MVC. На данный момент он разделен на 5 проектов.
WEB
Проект ASP.NET MVC содержит только HTML, CSS, контроллеры и очень специфичные для проекта валидаторы и связыватели моделей, а также контейнер IoC Ninject
МОДЕЛЬ
Проект Models содержит объекты домена IRepository<T>
, Службы, которые используют репозиторий, и вспомогательный код, не связанный с операциями базы данных.
СТОЙКОСТЬ
Проект Persistence содержит отображение Fluent nHibernate, отображение ISessionFactory
, реализацию Repository<T> : IRepository<T>
и т. Д.
PERSISTENCE.UTILITIES
Это вспомогательный проект, который имеет мало общего с моим фактическим конечным продуктом. Здесь я помещаю такие вещи, как тестирование заполнения базы данных, коллекции по умолчанию для быстрой настройки и т. Д.
TEST
Проект модульных испытаний
Проблема, с которой я сталкиваюсь, находится между Models
и Persistence
. Есть определенные случаи, когда мне нужно использовать готовая загрузка . В nHibernate я бы использовал Query<T>().Fetch(...)
для этого. Это будет работать нормально, за исключением того, что Models.dll
не имеет понятия nHibernate. Он не имеет понятия о какой-либо библиотеке, кроме System.dll
, и является полностью автономным.
Есть ли какой-нибудь особый способ добавить возможность загружать Eager в мой IRepository
без знания NHibernate.Linq
? Я не могу добавить метод, который принимает любое лямбда-выражение, которое включает в себя Fetch
, потому что мой уровень персистентности не существует на уровне модели. Но IRepository<T>
существует на уровне модели, потому что он используется в объектах Service, которые также не имеют понятия о базе данных. Они просто получают доступ к соответствующим репозиториям. Хранилища не доступны для слоя Web
, а только для соответствующих сервисов.
Есть идеи?