Не удается найти мой файл конфигурации nhibernate при отладке моего веб-приложения MVC - PullRequest
0 голосов
/ 28 октября 2010

У меня есть веб-проект MVC, который ссылается на проект библиотеки классов, который содержит уровни моего домена и персистентности.Я использую nHibernate для моего OR / M.Поскольку у меня есть несколько баз данных для подключения, я инициализирую свои фабрики сессий, указав имена файлов:

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 \ Temporary ASP.NET Files ....", и яВы убедились, что файлы конфигурации не копируются в эти временные расположения (но они находятся в папке bin \ Debug).Может кто-нибудь помочь мне получить доступ к моим файлам конфигурации?

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

Ааа, изменение .Location на .CodeBase, кажется, добилось цели:

var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
0 голосов
/ 28 октября 2010

Не совсем решение вашей проблемы, но я использовал этот шаблон для нескольких баз данных, использующих 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...