2011-01-28 9 views
1

Я создаю проект, в котором будет основная база данных (где есть некоторые глобальные вещи) и файлы (которые в основном являются файлами sqlite).Замок ActiveRecord изменить базу данных в использовании

Obviusly, когда пользователь нажимает кнопку «открыть» и выбирает новый файл, мне бы хотелось, чтобы приложение загрузило эту новую базу данных.

На самом деле мне удалось работать с 2 файлами конфигурации http://www.darkside.co.za/archive/2008/01/21/castle-activerecord-connecting-to-multiple-databases.aspx

Однако, есть 2 проблемы: во-первых, пароль ясно в XML-файл, в то время как это может быть хорошо для глобальных вещей, это не очень хорошо для файлов созданный пользователем (я до сих пор не знаю, является ли это реальной проблемой, я должен спросить, хотят ли они пароли для своих файлов).

otherone, что строки подключения будут различными для каждого файла, так что я могу работать в 2 способами (да, я должен изменить путь!):

  • Создать локальную копию БД и когда пользователь нажмет «сохранить», база данных будет скопирована поверх старой одной
  • Найти способ изменить строку подключения или загрузить конфигурацию «во время выполнения»

Я с нетерпением жду DifferentDatabaseScope, но я не понимаю: где я указываю всю конфигурацию NHibernate если я использую это? (Мне нужно передать только объект связи !!!)

ответ

0

Существует нет прямого способа изменить используемую базу данных, кроме как при запуске activitecord замка, вот что я нашел.

конфигурации
0

NHibernate будет то же самое, вы бы использовать один и тот же класс ActiveRecord, чтобы сделать запрос, просто обернуть код, который вы используете, чтобы получить запись в использовании DifferentDatabaseScope

Использование DifferentDatabaseScope

Другой вариант использования - класс DifferentDatabaseScope. Этот класс принимает объект IDbConnection в конструкторе, который должен быть открыт, и использует это подключение к базе данных для попытки получить данные.

В настоящее время (в сборке RC3) есть комментарий, который отмечает, что это не доказательство пули. Я уверен, что они просто оставили комментарии в комментариях.

Пример делать это в коде:

IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=TestB;Integrated Security=SSPI"); 

connection.Open(); 

using (new DifferentDatabaseScope(connection)) 

{ 

    TestTableDatabaseA test3 = TestTableDatabaseA.Find(1); 

    Console.WriteLine(test3.Title); 

}