如何将应用程序设置加载到 NHibernate.Cfg.Configuration 对象?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 来重写相同的功能。

以上是关于如何将应用程序设置加载到 NHibernate.Cfg.Configuration 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ZF3设置延迟加载(从任何地方都没有ServiceLocator模式)

如何使用 webpack 将本地图像加载到 html 中的元标记

如何将图像文件加载到 ImageView?

如何通过 sql loader 设置要加载到表列中的固定长度

Linux系统如何将某一程序设置为开机自启动,linux 小白求详细讲解......

如何通过代码将efi应用程序设置为引导加载程序?