2

我的客户要求从 ac# 应用程序从“CURRENT”数据库切换到 TEST 数据库或 DEV 数据库的可能性。一次只能激活一个。在菜单文件中,她选择 DEV 或 TEST 数据库。

如何配置 hibernate.cfg.xml 文件以获得更多连接字符串,例如 app.config。

<name="CURRENT" connectionString='User Id=u1;Data Source=CURRENT;Password=...' />
<name="DEV" connectionString='User Id=u1;Data Source=DEV;Password=...' />
<name="TEST" connectionString='User Id=u1;Data Source=TEST;Password=...' />
4

2 回答 2

5

更新:现在可以在NuGetGitHub 上使用

这是我一直想要的功能。它从来没有出现过,所以随着时间的推移,我创建了一个名为 NHibernate X-Factories 的扩展方法。您所要做的就是在一个 .cfg.xml 中创建多个会话工厂元素并命名它们。然后,您可以在配置 sessionFactory 时按名称调用它们。

休眠.cfg.xml

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2-x-factories">

    <session-factory name="Development">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string">Server=dsql01;DataBase=dbDev;uid=nhDeveloper;pwd=pass1234</property>

        <property name="show_sql">true</property>

        <mapping assembly="DataLayer" />
    </session-factory>

    <session-factory name="Production">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string">Server=psql02;DataBase=dbDev;uid=nhDeveloper;pwd=pass5678</property>

        <property name="show_sql">false</property>

        <mapping assembly="DataLayer" />
    </session-factory>

</hibernate-configuration>

C#

NHibernate.Cfg.Configuration config = new NHibernate.Cfg.Configuration();
config.Configure("~/nhibernate.cfg.xml", "Development").BuildSessionFactory();

在https://www.github.com/roydukkey/NHibernate-X-Factories/上查看更多信息。

于 2012-05-18T01:38:27.800 回答
0

我可以想到两种解决方法:

一种是将 NHibernate 配置放在 *.config 文件之外,然后使用 FileSystemWatcher 类监听这个外部文件。您可以动态更改文件内容。

另一种方法是同时拥有两个 NHibernate Configuration 对象,然后将其对应的 ISession 注入到您的 DAO / UnityOfWork / 不管

如果这只是用于开发/测试/生产数据库,我建议同时反对。最好有三个不同的环境,每个环境都有自己的 *.config 文件。

于 2012-05-04T14:12:23.263 回答