【问题标题】:relative path for database file in config file配置文件中数据库文件的相对路径
【发布时间】:2011-06-09 15:47:04
【问题描述】:

我创建了一个 WCF REST 服务,它使用 nhibernate 连接到 sql server compact edition 数据库。因此,我将 NHibernate 数据源配置为:

<property name="connection.connection_string">Data Source=[Path]\MyDb.sdf</property>

我现在遇到的烦恼是我无法弄清楚如何避免在配置中写出绝对路径。这很烦人,因为我将数据库文件作为项目的一部分保存在 App_Data 文件夹中。所以我不应该更新路径,例如当我将项目部署到另一个位置时,即使绝对路径不同。

使用 procmon 我注意到如果我不在数据源配置中写入绝对 pat,它会被解释为相对于路径:*C:\Program Files (x86)\Common Files\Microsoft Shared \DevServer\10.0*.

是否有可能让 nhibernate 假设我们希望将路径关联到应用程序 bin 文件夹(这是我的 App_Data/MyDb.sdf 结束的地方)?

【问题讨论】:

    标签: sql-server-ce config


    【解决方案1】:

    你应该使用:

    Data Source=|DataDirectory|\MyDb.sdf
    

    |DataDirectory| 指向App_Data 文件夹。

    【讨论】:

    • 仅供参考,您可以使用它来生成其他亲属,即:|DataDirectory|\..\bin\File.sdf。如果我能更多地投票,谢谢,完美。您知道连接字符串支持的任何其他路径关键字还是仅此一个?
    • 值得注意的是,上面保罗的提示确实有效,尽管在其他 SO 帖子中已经说过。
    • 是的,一个指向隐藏关键字定义的参考的链接会很棒......(引用你的工作)
    【解决方案2】:

    是否有任何理由将 NHibernate 配置保存在 XML 文件中,而不是使用 NHibernate 配置接口以编程方式构建配置?

    如果你有灵活性,我会这样做:

    var path = // dynamically generate your path
    var configuration = new Configuration();
    configuration.SetProperty(Environment.ConnectionString, String.Format("Data Source={0};", path));
    ... // other configuration properties
    

    您需要的所有类都在 NHibernate.Cfg 命名空间下。还有 Fluent NHibernate,它为构建配置提供了更简洁的界面。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      相关资源
      最近更新 更多