我创建了一个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就是在这里结束的)?
您应该使用:
Data Source=|DataDirectory|MyDb.sdf
|DataDirectory|
指向App_Data
文件夹。
是否有任何理由将NHibernate配置保存在XML文件中,而不是使用NHibernat配置接口以编程方式构建配置?
如果你有灵活性,我会这样做:
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,它为构建配置提供了一个更干净的界面。
希望能有所帮助!