DDD 방식을 사용하여 ASP.NET MVC 어플리케이션에서 NHibernate를 설정하려고합니다. 그러나 객체 관련 객체를 게으른로드하려고 할 때 오류가 발생합니다. Heres는 내 응용 프로그램을 구성했습니다 방법 :NHibernate : "느리게 초기화하지 못했습니다 ...", DDD 접근
인프라 층 : 매핑 파일 저장소 구현 및 구성하고 세션 공장을 건설하는 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 서비스를 사용하여 고객을 얻고 View (강하게 입력 된)에 고객을 표시하는 컨트롤러가 있습니다. 이 고객은 관련 엔터티 Contact를 가지고 있으며 Model이 Customer 객체 인 Model.Contact를 사용하여 View에서 액세스하려고하면 LazyInitializationException이 발생합니다.
나는 이것을 얻는 이유를 안다. CustomerRepository에서 Customer를 검색하는 데 사용 된 세션이 지금 죽어 있기 때문입니다. 문제는 어떻게 해결할 수 있을까입니다. 연락처 데이터가 아니라 고객 데이터 만 필요하기 때문에 저장소에있는 고객의 관련 Contact 엔티티를 가져 오는 것을 피할 수 있다면 좋겠다. 이것이 가능하다면?
그래서 질문 : 프리젠 테이션 계층이 관련 엔터티를 필요로 할 때까지 데이터베이스 쿼리를 기다릴 수 있습니까? 연락처?
내가 필요한 것은이 article이 묘사 한 것과 같다고 생각합니다. 인프라 계층에서 구현하는 방법이나 구현해야하는 위치를 파악할 수 없습니다.
미리 감사드립니다. 어떤 도움을 많이 주시면 감사하겠습니다!