2011-01-28 65 views
1

我正在創建一個項目,其中將有一個主數據庫(其中包含一些全局事物)和文件(基本上是sqlite文件)。Castle ActiveRecord更改數據庫使用

很顯然,當用戶點擊「打開」並選擇一個新文件時,我希望應用程序將加載這個新的數據庫。

其實我設法與2個配置文件 http://www.darkside.co.za/archive/2008/01/21/castle-activerecord-connecting-to-multiple-databases.aspx

然而,有2個問題要解決:第一,密碼是在XML文件中明確,而這可能是確定全球的事情,它不是對文件非常好由用戶創建(我仍然不知道這是否是一個真正的問題,我不得不問他們是否需要他們的文件密碼)。

的otherone是連接字符串將每個文件不同,這樣我就可以在2種工作方式(是的,我要改變路徑!):

  • 創建數據庫的本地副本,當用戶按下「保存」,該數據庫將在舊的一個
  • 複製找到一個方法來更改連接字符串或「運行時」加載配置

我期待着DifferentDatabaseScope,但我不明白:我在哪裏指定所有NHibernate配置如果我用這個? (我只能通過一個連接對象!!!)

回答

0

除了在castle activerecord start之外,沒有直接的方法來改變數據庫的使用,這就是我發現的。

0

NHibernate的配置是一樣的,你會使用相同的ActiveRecord類做查詢,只是包裝你的代碼用於獲取記錄在使用DifferentDatabaseScope

使用DifferentDatabaseScope

另一個使用的選項是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); 

} 
相關問題