我想在使用DDD方法的ASP.NET MVC应用程序中设置NHibernate。但是,在尝试延迟加载与对象相关的实体时确实发生错误。继承人我是如何构建我的应用程序:NHibernate:“未能懒惰地初始化...”,DDD方法
基础设施层: 包含映射文件,资料库的实现和NHibernate的引导程序来配置和建立一个会话工厂。
下面有一个存储库例如:
public class CustomerRepository : ICustomerRepository
{
public Customer GetCustomerById(int customerId)
{
using (var session = NHibernateBootstrapper.OpenSession())
return session.Get<Customer>(customerId);
}
}
域层: 简单POCO类,库和服务接口
应用层: 包含服务实现。
下面有一个服务例如:
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服务获取客户并在View中显示客户(强类型)。这个客户有一个相关的实体联系人,当我尝试在View中使用Model.Contact访问它时,其中Model是我的Customer对象,我得到一个LazyInitializationException。
我知道我为什么得到这个。这是因为用于检索CustomerRepository中的Customer的会话现在已经失效。我的问题是我如何解决这个问题。我想如果我可以避免在我的存储库中获取客户的相关联系人实体,因为某些视图只需要客户数据,而不需要联系人数据。如果这是可能的话?
所以对于这个问题:是否有可能等待查询数据库,直到表示层需要相关实体Contact?
我认为我需要的是类似于article所描述的内容。我只是不知道如何在基础设施层实现它,或者它应该在哪里实现?
在此先感谢。任何帮助都感激不尽!