1

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

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

实际上,我设法使用了 2 个配置文件 http://www.darkside.co.za/archive/2008/01/21/castle-activerecord-connecting-to-multiple-databases.aspx

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

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

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

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

4

2 回答 2

0

除了在城堡活动记录开始时,没有直接的方法可以更改正在使用的数据库,这就是我发现的。

于 2011-07-21T09:09:39.273 回答
0

NHibernate 配置是相同的,您将使用相同的 ActiveRecord 类进行查询,只需将用于获取记录的代码包装在 using DifferentDatabaseScope

使用不同的DatabaseScope

另一个要使用的选项是 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 回答