질문은 Fluent NHibernate + multiple databases에서 따릅니다 (이 링크를 따라 할 필요는 없으며 충분한 배경이 있어야합니다).Fluent NHibernate와 Multiple Databases로 특정 엔티티의 세션 팩토리를 식별하는 방법
내 문제는 다음과 같습니다.
저는 Fluent NHibernate를 사용하고 있습니다. 내 응용 프로그램은 여러 데이터베이스를 사용합니다. 각 데이터베이스에는 자체 엔티티가 등록 (매핑)되어 있습니다. 그 결과, 각각 하나의 DB에 관련된 여러 개의 세션 팩토리가 있고 매핑 된 엔티티 집합 각각에 '포함'되어 있습니다.
로딩 엔터티의 경우 모든 등록 된 엔터티 (모든 DB에서)에 사용할 수있는 표준로드 메서드를 제공하는 일반 팩토리 클래스를 만들었습니다. 문제는 다음과 같습니다.로드 메서드는 처리해야하는 엔티티 클래스에 대해 올바른 세션 팩터 리를 사용해야합니다. 사용할 세션 팩토리를 어떻게 결정합니까? 나는 모든 세션 팩토리를 '손에 들고'(데이터베이스 이름으로 인덱싱 됨), 바로 사용할 세션 팩토리를 선택하기 위해로드하려는 엔터티의 유형을 알기 만하면된다. 예를 들어
:
GetSessionFactory (boType)에 갈 필요가 무엇public IBaseBusinessObject CreatePopulatedInstance(Type boType, Guid instanceKey)
{
IBaseBusinessObject result = null;
ISessionFactory sessionFactory = GetSessionFactory(boType);
using (ISession session = sessionFactory.OpenSession())
{
using (session.BeginTransaction())
{
result = (IBaseBusinessObject)session.Get(boType, instanceKey);
}
}
return result;
}
?
읽어 주셔서 감사합니다.
대단히 감사합니다. 이 솔루션은 효과가있었습니다. – Trevor
GetClassMetadata() 메서드는 지정한 형식이 해당 세션 팩터 리에서 관리되지 않는 경우 null을 반환합니다. – Trevor
당신을 진심으로 환영합니다. –