Изменение строки соединения Nhibernate - PullRequest
2 голосов
/ 02 декабря 2010

простой вопрос, как мне изменить строку подключения nhibernate во время выполнения?

 <property name="connection.connection_string"  >value</property>

Ответы [ 4 ]

2 голосов
/ 14 декабря 2011

Когда вам нужно переключить соединения в зависимости от некоторых условий (например, наличие одного веб-сайта в живом и демонстрационном режиме, у каждого из которых есть разные строки подключения), то, вероятно, лучше всего реализовать класс, унаследованный от DriverConnectionProvider, и установить этот класс в качестве значениясвойства конфигурации connection.provider в вашем конфигурационном файле.Смотри http://jasondentler.com/blog/2009/11/authentication-impersonation-and-dynamic-nhibernate-connection-strings/

2 голосов
/ 28 сентября 2011

Работа с вашим app.config на лету немного ужасна.

Я бы посоветовал не хранить строку подключения среди других настроек nhibernate. Сохраните различные строки подключения в другом месте (например, в appSettings), затем установите соответствующую строку подключения непосредственно в соответствии с вашей конфигурацией NH:

var configuration = new Configuration();
configuration.SetProperty("connection.connection_string", "...connection string...");
configuration.Configure();

Просто убедитесь, что в файле конфигурации не указан параметр connection.connection_string, так как конфигурация. SetProperty будет работать правильно только в том случае, если этот параметр еще не установлен.

2 голосов
/ 02 декабря 2010

не важно, я понял.

        Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var root = XElement.Load(configuration.FilePath);
        root.Elements().Where(m => m.Name.LocalName == "hibernate-configuration").First().Elements().First().Elements().Where(m => m.FirstAttribute.Value == "connection.connection_string").First().Value = cs;
        root.Save(configuration.FilePath);
1 голос
/ 03 декабря 2010

Я бы лично пошел с Enterprise Library и его Data Access Application Block для предоставления API сеансов NHibernate с правильными именованными строками соединения при создании экземпляра API сеанса.

DAAB имеет функцию для создания DbConnectionна основе файла конфигурации.Таким образом, вы можете использовать определение нескольких строк подключения и сообщить DAAB, какое подключение использовать, а затем передать его в сеанс NHibernate, чтобы вы могли работать с NHibernate одновременно с несколькими хранилищами данных.

Использование этого подхода позволит избежать васвозиться с файлом конфигурации во время выполнения и даже позволяет вам создавать собственные экземпляры соединений, не определяя их сразу в файле конфигурации.

...