Fluent NHibernate/ASP.NET MVC 2アプリケーションを、各ユーザに単一の接続/接続文字列を使用するように設定する必要があります。これは、次の理由によるものです。Fluent NHibernate with ASP.NET MVC 2 - ユーザごとに1つの接続文字列を持つセッション管理
- すべてが同じスキーマであり、ユーザーがログインできる複数のデータベースがあります。
- このASP.NETアプリケーションが連携して動作するレガシーアプリケーションは、DBベンダーのプラットフォームに基づいているため、DBユーザーアカウントの使用を主張しています。
- 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つの接続文字列を使用する、馬鹿!」以外)が評価されます。
私は、(新しいDBAを取得する以外に)セッションに接続オブジェクト(またはメモリフットプリントや使い捨てオブジェクトを持つオブジェクト)を保存しないでください。あなたのソリューションは、この問題に対して非常に複雑に聞こえます。 – Paco
'SessionFactory'をセッションに保存するのはどうですか?私は彼らがかなり高価であることを知っていますが、ユーザーがログインしたときにセッションに作成して保存することで問題を抱えていますか? –
セッションにsessionfactoryを格納すると、接続および接続の接続をオーバーライドして、手動でado.net接続プールを管理する労力を節約できますが、ユーザー名とセッションファクトリのディクショナリをシングルトンでハードコードする方が簡単です。 – Paco