0

我有一个MVC web项目引用包含我的域和持久层的类库项目。我为我的OR/M使用nHibernate。由于我有多个数据库连接,我通过指定文件名初始化我会话工厂:调试我的MVC网络应用程序时无法找到我的nhibernate配置文件

var config = new Configuration().Configure(nHibernateCfgFileName) 

问题:当我尝试调试我的MVC项目,我得到一个错误说它无法找到nHibernate配置文件(文件被配置为“始终复制”以输出目录)。我已经试过:

var x = Assembly.GetExecutingAssembly().Location; 
var y = Assembly.GetEntryAssembly().Location; 
var z = Assembly.GetCallingAssembly().Location; 

但上述所有回报回来的 “C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \临时ASP.NET文件......”,我已经验证配置文件不会复制到这些临时位置(但它们位于bin \ Debug位置中)。有人可以帮我找到我的配置文件吗?

回答

0

啊,改变.Location到.CodeBase似乎做绝招:

var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
0

不完全是你的问题的解决方案,但我用这种模式使用NHibernate的多个数据库,http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx

var dataBases = _globalSessionFactory.OpenSession().CreateQuery("from DataBases").List<DataBases>(); 

与此:

我通过更换这条线从加载配置文件,而不是从我的数据库连接字符串

var dataBases = GetDatabaseList(); 

private static IList<DataBase> GetDatabaseList() { 
    var databases = new List<DataBase>(); 
    int numberOfDatabases = ConfigurationManager.AppSettings["NumberOfDatabases"].ToInt(); 
    for(int i = 1; i <= numberOfDatabases; i++) 
    databases.Add(new DataBase 
        { 
         Identifier = ConfigurationManager.AppSettings["DatabaseName" + i], 
         ConnectionString = ConfigurationManager.AppSettings["ConnectionString" + i] 
        }); 
    return databases; 
} 
相关问题