Замок ActiveRecord меняет базу данных в использовании - PullRequest
1 голос
/ 28 января 2011

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Конфигурация 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);

}
0 голосов
/ 21 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...