1

Fluent NHibernate/ASP.NET MVC 2アプリケーションを、各ユーザに単一の接続/接続文字列を使用するように設定する必要があります。これは、次の理由によるものです。Fluent NHibernate with ASP.NET MVC 2 - ユーザごとに1つの接続文字列を持つセッション管理

  1. すべてが同じスキーマであり、ユーザーがログインできる複数のデータベースがあります。
  2. このASP.NETアプリケーションが連携して動作するレガシーアプリケーションは、DBベンダーのプラットフォームに基づいているため、DBユーザーアカウントの使用を主張しています。
  3. DBAに単一のdo-everythingユーザーアカウントを提供するように説得しようとすると、それを機能させる方法を考え出すだけではなく、さらに苦労して時間がかかります。

いくつかの「Do not do that」という回答を避けるために理由を説明しなければならないと感じました。

とにかく、私は最初に、すべてのものを1つの接続文字列で通常の正しい方法で設定します。私はSessionFactoryを作成するためにLLBLGen-SessionManagerを作成しました。 SessionFactoryは、Application_Start()の間に作成され格納されます。私はまた、NHibernateセッションを現在のセッションコンテキストにバインドするIHttpModuleを持っています。 (私は誰のウェブサイトからもそれを忘れてしまった)。

私は今何をにしたいのですか?を行うには、ユーザーがログインページに到着する必要があります。彼らはデータベースを選択し、ユーザー名とパスワードを入力します。アプリケーションはデータベース接続を作成し、それをユーザーのセッションに格納し、NHibernateはそのデータベース接続を受け取り、それを使用します。

一般的にこれを行うためのヒントは非常に役に立ちますが、実際には私は最初のハードルを乗り越える必要があります。SessionFactory設定からDB接続情報を削除すると、例外がスローされます。 SessionFactory設定からDB接続情報を削除しないと、OpenSession(IDbConnection)を使用して別の接続を提供しても、その接続文字列が使用されているようです。また、ユーザーがログインするまでNHibernateが何もしないようになった今、私はIHttpModuleがこれらの問題の一部を引き起こしているように感じます。

これは、質問よりもインコヒーレントな暴言のように聞こえる場合は謝罪してください。私は今、しばらくの間、頭に頭を叩いています。ベストプラクティスに関するすべての提案(「1つの接続文字列を使用する、馬鹿!」以外)が評価されます。

+0

私は、(新しいDBAを取得する以外に)セッションに接続オブジェクト(またはメモリフットプリントや使い捨てオブジェクトを持つオブジェクト)を保存しないでください。あなたのソリューションは、この問題に対して非常に複雑に聞こえます。 – Paco

+0

'SessionFactory'をセッションに保存するのはどうですか?私は彼らがかなり高価であることを知っていますが、ユーザーがログインしたときにセッションに作成して保存することで問題を抱えていますか? –

+0

セッションにsessionfactoryを格納すると、接続および接続の接続をオーバーライドして、手動でado.net接続プールを管理する労力を節約できますが、ユーザー名とセッションファクトリのディクショナリをシングルトンでハードコードする方が簡単です。 – Paco

答えて

1

あなたはhttp://www.codeproject.com/KB/aspnet/NHibernateMultipleDBs.aspxを見ましたか? Fluentでこれを行う方法については説明していませんが、NHibernateの方がまっすぐですが、それは良い出発点になると思います。

+0

私はそれを見ましたが、それは助けにはなりません: "データベースごとに個別の設定ファイルを作成し、すべてを中央の設定フォルダに入れてから、web/app.configから参照してください" –

+0

これを翻訳して、複数のセッションファクトリを作成する複数の流暢なコンフィグレーションを作成します。 –

+0

私は簡単にそれを読んだだけですが、あなたに最も適している部分はセッションに保存されている一意の文字列のハッシュで、セッション作成に使用するセッションファクトリを参照していると思いました。私はあなたのニーズに容易に適応できると思いました。 –

関連する問題