Как отождествить Фабрику Сессии конкретного объекта с Быстрым NHibernate и Несколькими Базами данных

Вопрос следует за Быстрым 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)?

Спасибо за чтение!

7
задан Community 23 May 2017 в 11:48
поделиться

1 ответ

Я бы начал с рассмотрения метода ISessionFactory.GetClassMetaData.

IClassMetadata metadata = sessionfactory.GetClassMetadata(boType); 

Если вы можете вести список ваших экземпляров ISessionFactory, вы можете перечислить их, пока не найдете тот, который имеет метаданные для вашего типа boType.

Я никогда не использовал его, и у меня нет под рукой ссылок, но я ожидал, что он либо вернет null, либо выдаст исключение, если не распознает тип. Если вы получаете значение для метаданных без ошибки, то это фабрика сеанса.

Удачи

Нил.

4
ответ дан 7 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: