Как я могу подключиться к различным БД на разных машинах с помощью nhibernate и unhaddins?

Я пытаюсь соединиться с nHibernate и Unhaddins на разных машинах, у каждого есть база данных в Oracle. У них разные таблицы с разными базами данных.

Мне нужно прочитать таблицу, давайте назовем ее как C_SM_SEND,

Внутри этой таблицы у меня есть столбец Body, который будет содержать XML.

Другой процесс прочитает эту таблицу, получит этот XML и вставит его значения в другую таблицу, назовем ее как PC_TO_SM_PRIM_DATA, Давайте не будем беспокоиться о столбцах или именах таблиц.

Теперь важно то, что мне придется читать одну таблицу в одной БД на одной машине => "MACHINE1/ORCL", читать таблицу с именем "C_SM_SEND" и вставлять значения в другую таблицу другой БД другой машины => ". MACHINE2/SERV", написание таблицы с именем PC_TO_SM_PRIM_DATA.

Кроме того, помните: отображение каждой таблицы отличается!

Я прочитал несколько статей, в которых объясняется, как NHibernate подключается к разным машинам, используя uNHAddIns. Ничего из того, что я прочитал, не сработало.

Мое приложение делается по стандартам MVVM, IoC, а также использую репозиторий.

Я прочитал также эту статью Фабио Мауло, но безуспешно:

Настройка поставщиков фабрики сеансов

Любая помощь будет приветствоваться.

С уважением,

Густаво.

1 ответ

Что вам нужно, так это один SessionFactory на базу данных. Так что если у вас есть 2 базы данных, которые вы используете, это 2 SessionFactories - по одной для каждой базы данных. Все абстракции в uNHAddins просто сводятся к созданию и управлению этими SessionFactories.

Допустим, вы используете 2 базы данных - Database1 а также Database2, Database1 есть одна таблица - C_SM_SEND, Database2 есть другая таблица - PC_TO_SM_PRIM_DATA, Действительно простой способ структурировать ваш код - это иметь 2 класса, которые создают SessionFactories:

public class Database1
{
    private ISessionFactory _sessionFactory;

    public Database1SessionFactory()
    {
        //Build your session factory for Database1 here
        //with the entity C_SM_SEND, connection string to Database1, etc, etc.
    }

    public ISession OpenSession()
    {
        return _sessionFactory.OpenSession();
    }
}

public class Database2
{
    private ISessionFactory _sessionFactory;

    public Database1SessionFactory()
    {
        //Build your session factory for Database2 here
        //with the entity PC_TO_SM_PRIM_DATA, connection string to Database2, etc, etc.
    }

    public ISession OpenSession()
    {
        return _sessionFactory.OpenSession();
    }
}

Вы можете сопоставить Database1 а также Database2 используя ваш IoC. Это оставляет просто открытие правильного сеанса и чтение / запись ваших сущностей.

Транзакционные операции могут выполняться в обеих базах данных:

using (var tx = new TransactionScope())
{
    //session1.Save(obj1);
    //session2.Save(obj2);
    tx.Complete();
}
Другие вопросы по тегам