配置文件中数据库文件的相对路径

时间:2011-06-09 15:47:04

标签: sql-server-ce config

我创建了一个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结束的地方)?

2 个答案:

答案 0 :(得分:17)

您应该使用:

Data Source=|DataDirectory|\MyDb.sdf

|DataDirectory|指向App_Data文件夹。

答案 1 :(得分:1)

有没有理由将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,它为构建配置提供了更清晰的界面。

希望有所帮助!