基础结构层:
包含映射文件、存储库实现和用于配置和构建会话工厂的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服务获取客户并在视图中显示客户(强类型)。此客户有一个相关的实体联系人,当我尝试使用Model.Contact在视图中访问它时,其中Model是我的客户对象,我得到一个LazyInitializationException。
我知道我为什么会得到这个。这是因为用于在CustomerRepository中检索客户的会话现在已停止。我的问题是如何解决这个问题。我希望能够避免在我的存储库中获取客户的相关联系人实体,因为某些视图只需要客户数据,而不需要联系人数据。如果可能的话?
那么问题是:在表示层需要相关实体联系之前,是否可以等待查询数据库?
article
描写。我只是不知道如何在基础架构层实现它,或者应该在哪里实现它?
提前谢谢。任何帮助都将不胜感激!