1

難しい状況が1つあります。

私たちが知っているように、NHSessionFactoryは私たちのアプリのシングルトンです。

「重量があり、スレッドセーフであり、データベースごとに1つだけ持つ必要があります」。

そして、私の流暢に構成されたデータベースがどこSessionFactoryから作成されます。Configuration().BuildSessionFactory()Configuration()

これが問題です。 MVCアプリの接続文字列に異なるユーザーを使用する必要があります。これは、さまざまなユーザーがデータベースに接続するために必要です。接続に問題がない場合は、NHを使用してドメインマップオブジェクトを操作します。

ここでの質問は 、最初に作成する必要がある場合に、さまざまなユーザーを渡してConfigurationこれを使用する方法です。もう一度作成するのは間違った方法ですよね?SessionFactoryConfigurationSessionFactory

そして、MVCアプリを実行する前に、Windsorコンテナーを使用してすべてのオブジェクトを登録するため、これはさらに困難になります。

4

1 に答える 1

4

アプリケーションのユーザーごとに異なる接続文字列を提供したいようです。

NHibernate には独自の DriverConnectionProvider を提供できる機能があり、GetConnection() メソッドをオーバーライドすることで、最終的にその場でカスタム接続文字列を作成できるようになります。

例:

class DynamicConnectionProvider : DriverConnectionProvider
{
    public override IDbConnection GetConnection()
    {
        IDbConnection connection = Driver.CreateConnection();

        try
        {
            connection.ConnectionString = // Add your logic for dynamically creating a connection string

            connection.Open();
        }
        catch ( Exception e )
        {
            connection.Dispose();

            throw;
        }

        return connection;
    }
}

例については、次のリンクも参照してください。

はい、重複する SessionFactories を作成すると、アプリケーションのメモリ使用量にかなりのコストがかかり、アプリケーションのアーキテクチャが複雑になります。また、上に挙げたような他のオプションがあるため、実際には不要です。

于 2012-11-13T05:14:20.667 に答える