C# Castle ActiveRecord更改数据库正在使用中

C# Castle ActiveRecord更改数据库正在使用中,c#,castle-activerecord,multiple-databases,C#,Castle Activerecord,Multiple Databases,我正在创建一个项目,其中将有一个主数据库(其中有一些全局的东西)和文件(基本上是sqlite文件) 显然,当用户单击“打开”并选择一个新文件时,我希望应用程序将加载这个新数据库 实际上,我设法使用了2个配置文件 然而,有两个问题:首先,xml文件中的密码是明确的,虽然这对于全局的东西来说是可以的,但对于用户创建的文件来说却不是很好(我仍然不知道这是否是一个真正的问题,我不得不问他们是否需要文件的密码) 另一个是,每个文件的连接字符串都不同(是的,我必须更改路径!),因此我可以通过两种方式工作:

我正在创建一个项目,其中将有一个主数据库(其中有一些全局的东西)和文件(基本上是sqlite文件)

显然,当用户单击“打开”并选择一个新文件时,我希望应用程序将加载这个新数据库

实际上,我设法使用了2个配置文件

然而,有两个问题:首先,xml文件中的密码是明确的,虽然这对于全局的东西来说是可以的,但对于用户创建的文件来说却不是很好(我仍然不知道这是否是一个真正的问题,我不得不问他们是否需要文件的密码)

另一个是,每个文件的连接字符串都不同(是的,我必须更改路径!),因此我可以通过两种方式工作:

  • 创建数据库的本地副本,当用户按“保存”时,数据库将复制到旧数据库上
  • 找到“在运行时”更改连接字符串或加载配置的方法

我期待不同的DatabaseScope,但我不明白:如果我使用它,我在哪里指定所有NHibernate配置?(我只需要传递一个连接对象!!!)

除了在castle activerecord开始时,没有直接的方法来更改正在使用的数据库,这就是我发现的。

NHibernate配置将是相同的,您将使用相同的activerecord类来执行查询,只需将用于获取记录的代码包装在using Differenting DatabaseScope中

使用不同的DatabaseScope

另一个要使用的选项是DifferentitDatabaseScope类。此类接受构造函数中需要打开的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);

}