Я пытаюсь настроить NHibernate в приложении ASP.NET MVC с использованием DDD-подхода. Тем не менее, я получаю сообщение об ошибке при попытке ленивой загрузки объекта, связанного с объектами. Вот как я структурирован мое заявление:NHibernate: «не удалось лениво инициализировать ...», подход DDD
Infrastructure слой: Содержит картографические файлы, реализацию хранилища и загрузчик NHibernate для настройки и создания сеанса завода.
Heres пример репозитория:
public class CustomerRepository : ICustomerRepository
{
public Customer GetCustomerById(int customerId)
{
using (var session = NHibernateBootstrapper.OpenSession())
return session.Get<Customer>(customerId);
}
}
домена слой: Имеет простые классы POCO, хранилища и сервисные интерфейсы уровня
Применение: содержит реализации услуг.
Heres пример службы:
public class CustomerService : ICustomerService
{
private ICustomerRepository _repository;
public CustomerService(ICustomerRepository repository)
{
_repository = repository;
}
public Customer GetCustomerById(int customerId)
{
return _repository.GetCustomerById(customerId);
}
}
Презентация слоя: Содержит приложение ASP.NET MVC. И здесь я обнаружил свою проблему. Используя подход MVC, у меня есть контроллер, который, используя службу CustomerService, получает клиента и отображает клиента в представлении (строго типизированном). У этого клиента есть связанный с ним контакт, и когда я пытаюсь получить доступ к нему в моем представлении с помощью Model.Contact, где Model является объектом моего клиента, я получаю исключение LazyInitializationException.
Я знаю, почему я это понимаю. Это связано с тем, что сеанс, используемый для извлечения Клиента в CustomerRepository, уже мертв. Моя проблема в том, как я могу это исправить. Я хотел бы, если бы я мог избежать получения связанного объекта Contact для Клиента в моем репозитории, потому что некоторым представлениям нужны только данные Клиента, а не данные Contact. Если это вообще возможно?
На вопрос: можно ли дождаться запроса в базе данных до тех пор, пока уровень представления не потребует связанного с ним объекта связи?
Я думаю, что мне нужно что-то вроде того, что описывает этот article. Я просто не могу понять, как реализовать его на уровне инфраструктуры, или где он должен быть реализован?
Заранее спасибо. Любая помощь будет высоко ценится!