Вопрос следует за Быстрым NHibernate + несколько баз данных (никакая потребность перейти по этой ссылке, должно быть достаточно фона здесь).
Моя проблема - это:
Я использую Быстрый NHibernate. Мое приложение использует несколько баз данных. Каждая база данных имеет свои собственные объекты, зарегистрированные (отображенный) против него. Результат, это имеет несколько Фабрик Сессии, каждый касающийся единственного DB и каждого 'содержащего' его собственный набор отображенных объектов.
Для загрузки объектов я создал универсальный класс Фабрики, который предоставляет некоторые стандартные методы загрузки, применимые для любого зарегистрированного объекта (в любом DB). Проблема: методы загрузки должны использовать корректную фабрику сессии для класса объекта, с которым я занят, имея дело. Как я определил бы, какую фабрику сессии я должен использовать? У меня есть все Фабрики Сессии 'под рукой' (и индексированный именем базы данных), мне просто нужен путь, зная просто тип Объекта, который я собираюсь загрузить выбора правильной Фабрики Сессии для использования.
Например:
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;
}
На какие потребности пойти в GetSessionFactory (boType)?
Спасибо за чтение!
Я бы начал с рассмотрения метода ISessionFactory.GetClassMetaData.
IClassMetadata metadata = sessionfactory.GetClassMetadata(boType);
Если вы можете вести список ваших экземпляров ISessionFactory, вы можете перечислить их, пока не найдете тот, который имеет метаданные для вашего типа boType.
Я никогда не использовал его, и у меня нет под рукой ссылок, но я ожидал, что он либо вернет null, либо выдаст исключение, если не распознает тип. Если вы получаете значение для метаданных без ошибки, то это фабрика сеанса.
Удачи
Нил.