我创建了一个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结束的地方)?
答案 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,它为构建配置提供了更清晰的界面。
希望有所帮助!