1

メインデータベース(いくつかのグローバルなものがあります)とファイル(基本的にsqliteファイル)があるプロジェクトを作成しています。

明らかに、ユーザーが「開く」をクリックして新しいファイルを選択すると、アプリケーションがこの新しいデータベースをロードするようにしたいと思います。

実際、私は2つの構成ファイルを処理することができました http://www.darkside.co.za/archive/2008/01/21/castle-activerecord-connecting-to-multiple-databases.aspx

ただし、2つの問題があります。1つは、パスワードがxmlファイルで明確であるのに対し、これはグローバルなものには問題ない可能性がありますが、ユーザーが作成したファイルにはあま​​り適していません(これが本当の問題かどうかはまだわかりません、私はファイルのパスワードが必要かどうかを尋ねる必要があります)。

もう1つは、接続文字列がファイルごとに異なるため(はい、パスを変更する必要があります!)、次の2つの方法で作業できます。

  • データベースのローカルコピーを作成し、ユーザーが「保存」を押すと、データベースが古いデータベースにコピーされます
  • 接続文字列を変更する方法、または「実行時に」構成をロードする方法を見つける

DifferentDatabaseScopeを楽しみにしていますが、わかりません。これを使用する場合、すべてのNHibernate構成をどこで指定しますか?(接続オブジェクトのみを渡す必要があります!!!)

4

2 に答える 2

0

Castle activerecordの開始時を除いて、使用中のデータベースを直接変更する方法はありません。それが私が見つけたものです。

于 2011-07-21T09:09:39.273 に答える
0

NHibernateの構成は同じで、同じActiveRecordクラスを使用してクエリを実行し、DifferentDatabaseScopeを使用してレコードを取得するために使用するコードをラップするだけです。

DifferentDatabaseScopeの使用

使用するもう1つのオプションは、DifferentDatabaseScopeクラスです。このクラスは、開く必要のあるコンストラクターでIDbConnectionオブジェクトを受け取り、このデータベース接続を利用してデータの取得を試みます。

現在(RC3ビルドで)、これは防弾ではないことを指摘するコメントがあります。コメントで「まだ」をやめただけだと思います。

コードでこれを行う例は次のとおりです。

IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=TestB;Integrated Security=SSPI");

connection.Open();

using (new DifferentDatabaseScope(connection))

{

    TestTableDatabaseA test3 = TestTableDatabaseA.Find(1);

    Console.WriteLine(test3.Title);

}
于 2011-11-21T14:20:27.653 に答える