0

異なるマシンで nHibernate と Unhaddins に接続しようとしています。それぞれに Oracle のデータベースがあります。それらには、異なるデータベースを持つ異なるテーブルがあります。

テーブルを読み取る必要があります。それを と呼びましょうC_SM_SEND

このテーブル内にBodyは、XML を含む という列があります。

別のプロセスがこのテーブルを読み取り、この XML を取得して、その値を別のテーブルに挿入しますPC_TO_SM_PRIM_DATA。列やテーブルの名前については気にしないでください。

ここで重要なのは、1 つのマシンの 1 つの DB で 1 つのテーブルを読み取る必要がある => "MACHINE1/ORCL"、"C_SM_SEND" という名前のテーブルを読み取り、別のマシンの別の DB の別のテーブルに値を挿入する => " MACHINE2/SERV"、PC_TO_SM_PRIM_DATA という名前のテーブルを書き込みます。

また、覚えておいてください: 各テーブルのマッピングは異なります!

NHibernate が uNHAddIns を使用してさまざまなマシンに接続する方法を説明する記事をいくつか読みましたが、読んだものはどれも機能しませんでした。

私のアプリケーションは、標準の MVVM、IoC に合わせて作成されており、リポジトリも使用しています。

Fabio Maulo のこの記事も読みましたが、成功しませんでした:

セッション ファクトリ プロバイダの構成

どんな助けでも大歓迎です。

よろしくお願いします、

グスタボ。

4

1 に答える 1

0

必要なのは、データベースごとに 1 つの SessionFactoryです。したがって、使用しているデータベースが 2 つある場合、それは 2 つの SessionFactories (データベースごとに 1 つ) です。uNHAddins のすべての抽象化は、これらの SessionFactories の作成と管理を要約するだけです。

と の 2 つのデータベースを使用しているとしDatabase1ますDatabase2Database1その 1 つのテーブルがあります - C_SM_SENDDatabase2他のテーブルがあります - PC_TO_SM_PRIM_DATA。コードを構造化する非常に簡単な方法は、SessionFactory を構築する 2 つのクラスを用意することです。

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();
    }
}

IoC をマップDatabase1して使用できます。Database2あとは、適切なセッションを開いて、エンティティの読み取り/書き込みを行うだけです。

トランザクション操作は、次の方法で両方のデータベースで実行できます。

using (var tx = new TransactionScope())
{
    //session1.Save(obj1);
    //session2.Save(obj2);
    tx.Complete();
}
于 2012-12-27T02:55:55.360 に答える