2011-01-28 90 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); 

}