【问题标题】:How to load application settings to NHibernate.Cfg.Configuration object?如何将应用程序设置加载到 NHibernate.Cfg.Configuration 对象?
【发布时间】:2010-12-31 09:29:45
【问题描述】:

如何使用 App.config 中的 System.Configuration.ConfigurationManager 将应用程序设置加载到 NHibernate.Cfg.Configuration 对象?

【问题讨论】:

    标签: nhibernate app-config configurationmanager


    【解决方案1】:

    hibernate 配置也可以移到 app.config 中,这样可以简化启动代码。请参阅 NHibernate 参考手册中的 XML Configuration File 部分。

    Configuration cfg = new NHibernate.Cfg.Configuration();
    ISessionFactory sf = cfg.Configure().BuildSessionFactory();
    

    在 app.config 中:

    <configuration>
            <configSections>
                <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
            </configSections>
            <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
                <session-factory>
                    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
                    <property name="connection.dialect">NHibernate.Dialect.MsSql2005Dialect</property>
                    <property name="connection.connection_string_name">Northwind</property>
                    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
                    <mapping assembly="assemblyname" />
                </session-factory>
            </hibernate-configuration>
            <connectionStrings>
                    <add name="Northwind" connectionString="Data Source=(local);Initial Catalog=Northwind;Trusted_Connection=True;>
            </connectionStrings>
    </configuration>
    

    【讨论】:

    • 中的xmlns="urn:nhibernate-configuration-2.2"非常重要。我没有,一直报错。谢谢@Lachlan_Roche
    【解决方案2】:

    app.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="Northwind" connectionString=
           "Data Source=(local);Initial Catalog=Northwind;Trusted_Connection=True;>
      </connectionStrings>
    </configuration>
    

    C#代码:

    string connectionString =  System.Configuration.ConfigurationManager
                                     .ConnectionStrings["Northwind"].ToString();
    
    NHibernate.Cfg.Configuration nHibernateConfiguration =
                                          new NHibernate.Cfg.Configuration();
    nHibernateConfiguration.SetProperty(
      NHibernate.Cfg.Environment.ProxyFactoryFactoryClass,
      typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName);
    nHibernateConfiguration.SetProperty(
      NHibernate.Cfg.Environment.Dialect,
      typeof(NHibernate.Dialect.MsSql2005Dialect).AssemblyQualifiedName);
    nHibernateConfiguration.SetProperty(
      NHibernate.Cfg.Environment.ConnectionString, connectionString);
    nHibernateConfiguration.SetProperty(
      NHibernate.Cfg.Environment.FormatSql, "true");
    nHibernateConfiguration.AddAssembly(Assembly.GetCallingAssembly());
    
    ISessionFactory oneISessionFactory = nHibernateConfiguration
                                            .BuildSessionFactory();
    

    【讨论】:

    • 与其手动从配置管理器获取值,不如尝试设置connection_string_name。请参阅 How to configure NHibernate to use connection string from <connectionStrings> configuration section 和 @LachlanRoche 的回答。
    • @Joel:你在否决我之前读过这个问题吗?它专门调用 System.Configuration.ConfigurationManager。 Lachlan 的回答很有帮助,但没有回答所提出的问题。
    • 考虑到 NHibernate 也使用 ConfigurationManager,它不是很(跨项目)DRY 来重写相同的功能。
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2016-08-06
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多