【问题标题】:Castle ActiveRecord change database in useCastle ActiveRecord 更改数据库正在使用中
【发布时间】:2011-01-28 15:53:02
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# castle-activerecord multiple-databases


    【解决方案1】:

    除了城堡 activerecord 启动之外,没有直接的方法可以更改正在使用的数据库,这就是我发现的。

    【讨论】:

      【解决方案2】:

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

      使用不同的DatabaseScope

      另一个要使用的选项是 DifferentDatabaseScope 类。此类在构造函数中获取一个需要打开的 IDbConnection 对象,并利用此数据库连接尝试检索数据。

      目前(在 RC3 版本中),有一条评论指出这不是防弹的。我敢肯定他们只是在 cmets 中省略了“尚未”。

      在代码中这样做的一个例子是:

      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);
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多