更改Nhibernate Connectionstring

时间:2010-12-02 14:06:36

标签: c# nhibernate linq-to-xml

简单的问题如何在运行时更改nhibernate的连接字符串?

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

4 个答案:

答案 0 :(得分:2)

没关系,我明白了。

        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 :(得分:2)

动态修补你的app.config有点可怕。

我建议不要将连接字符串存储在其他nhibernate设置中。将各种连接字符串保存在别处(例如在appSettings中),然后直接针对NH配置设置适当的连接字符串:

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

请确保未在配置文件中指定connection.connection_string设置,因为只有设置不存在时,配置.SetProperty才能正常工作。

答案 2 :(得分:2)

当您需要根据某些条件切换连接时(例如,有一个网站具有实时和演示模式,每个网站都有不同的连接字符串),那么最好实现从DriverConnectionProvider继承的类并将此类设置为值配置文件中的connection.provider配置属性。 见http://jasondentler.com/blog/2009/11/authentication-impersonation-and-dynamic-nhibernate-connection-strings/

答案 3 :(得分:1)

我个人会使用Enterprise Library及其Data Access Application Block在实例化会话API时为NHibernate会话API提供正确的命名连接字符串。

DAAB具有基于配置文件实例化DbConnection的功能。因此,您可以使用多个连接字符串定义,并告诉DAAB使用哪个连接,然后将其传递给NHibernate会话,以便您可以同时使用NHibernate对多个数据存储区。

使用这种方法可以避免在运行时弄乱配置文件,甚至允许您创建自己的连接实例,而无需立即在配置文件中定义它们。