NHibernate에서 영감을 얻은 DAL 리펙토링 연옥의 일부로 리포지토리 패턴을 사용하여 NHibernate를 UI 레이어에서 유지할 수 있습니다. 다음은 저장소의 Load 메서드 예제입니다.NHibernate : 리포지토리에서 완전히로드 된 인스턴스를 반환하기위한 패턴
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
}
return storedWill;
}
저는 웹 사이트에서 세션이 무엇인지 알지 못합니다.
물론 위의 메서드가 StoredWill을로드하지 않기 때문에 초기화가 지연되는 경우가 발생하기 시작합니다. 프록시 만 반환합니다. 프록시의 속성에 접근 할 때, 여러분은 Session의 범위 내에서 더 길기 때문에 예외가 발생합니다. 나는 무슨 일이 일어나고 있는지 깨달았을 때 크게 웃었다.
나는 함께이 문제를 해결 한 :
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
string iReallyCouldntCareLess = storedWill.TestatorLastName;
}
return storedWill;
}
하지만 모두 약간의 바보을 보인다. 누구보다 약간 더 우아한 패턴을 사용합니까?
당신을 사랑해. ncommon framework 밖으로
데이비드
나는 정말로 혼란 스럽다. 저장소 패턴의 요점은 UI 계층에서 ORM implmementation을 숨기는 것이라고 생각했습니다. – David
세부 사항을 숨기지 만, 참여하는 작업 단위를 저장소에 알릴 필요가 있습니다. 작업 단위 컨테이너로 ISession을 사용하거나 자체 작업 단위 구현에서 랩핑 할 수 있습니다. –