2

私のクライアントは、ac# アプリから "CURRENT" データベースから TEST データベースまたは DEV データベースに切り替える可能性を尋ねました。一度にアクティブにできるのは 1 つだけです。メニュー ファイルで、DEV または TEST データベースを選択します。

app.config などの接続文字列を増やすには、hibernate.cfg.xml ファイルを構成する方法を教えてください。

<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 という拡張メソッドを作成しました。1 つの .cfg.xml に複数の session-factory 要素を作成し、それらに名前を付けるだけです。その後、sessionFactory を構成するときに、それらを名前で呼び出すことができます。

nhibernate.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

これを回避する方法は 2 つあります。

1 つは、NHibernate 構成を *.config ファイルの外に置き、FileSystemWatcher クラスを使用してこの外部ファイルをリッスンすることです。ファイルの内容を動的に変更できます。

もう 1 つの方法は、同時に 2 つの NHibernate 構成オブジェクトを用意し、対応する ISession を DAO / UnityOfWork / なんでも注入することです。

これが開発/テスト/運用データベース専用である場合は、両方に反対することをお勧めします。それぞれ独自の *.config ファイルを持つ 3 つの異なる環境を用意することをお勧めします。

于 2012-05-04T14:12:23.263 に答える