2009-08-26 14 views
1

私はS#arpアーキテクチャ(NHibernateを使用しています)を使用しています。あるデータベース内のテーブルにマッピングされたエンティティと、別のデータベースにマッピングされたエンティティがあります。開示:データベースはすでに存在するので、私はモデルを最初に行うことはできません。複数のデータベースを持つS#arpアーキテクチャ/ NHibernate

これを動作させるにはどうすればよいですか?

EDIT:エンティティを別のデータベースのテーブルにマップするには、Fluent NHibernateのSchemaIsメソッドをお勧めしますか?これはNHibのxmpマッピングファイルでも可能だと思います。

答えて

3

追加のデータベースの代わりにNHibernateSession.AddConfigurationを使用する必要があります。 NHibernateSession.AddConfigurationの呼び出しは、NHibernateSession.Init()のすぐ下にあります。明示的なセッションファクトリキーは、2回目の初期化のために定義する必要があります。

全体のプロセスをここで詳しく説明します。

https://github.com/sharparchitecture/sharp-architecture/wiki?Page=FAQ

2

私がこれをしたのは、複数のnhibernate設定ファイルを使ってglobal.asax.cs内のInitializeNHibernateSessionで複数のNHibernateSessionsを初期化することです。その後、コントローラ内の[Transaction( "nhibernate.dbname")](dbnameはWebSessionStoragesに割り当てられた名前)をそれぞれの適切なアクションメソッドに対して使用しました。

+0

あなたInitializeNHibernateSession方法のサンプルをください投稿できますか?ありがとう。 – LordHits

+0

ここに行く... public override void Init() { base.Init(); webSessionStorage1 =新しいWebSessionStorage(これ、 "nhibernate.db1"); webSessionStorage2 =新しいWebSessionStorage(これ、 "nhibernate.db2"); } ... ます。private void InitializeNHibernateSession(){ NHibernateSession.Init( webSessionStorage1、 新しい文字列[] {Server.MapPathの( "〜/ binに/ MyProject.Data.dll")}、 サーバー.MapPath( "〜/ NHibernateDB1.config")); NHibernateSession.Init( webSessionStorage2、 新しい文字列[] {Server.MapPathの( "〜/ binに/ MyProject.Data.dll")}、 Server.MapPathの( "〜/ NHibernateDB2.config")); } – Richard

+1

1つのコントローラアクションが両方のデータベースで動作する場合はどうなりますか? – Amitabh