MySQLサーバとMicrosoft SQLサーバ2008の両方に接続するようにNHibernateを設定するにはどうすればよいですか?あるサーバーから別のサーバーにデータをコピーする必要があります。私は共有NHibernateについて聞いた。MySQLサーバとMicrosoft SQLサーバ2008の両方でNHibernateを使用する方法
0
A
答えて
2
私は数ヶ月前にかなり苦労しました。 私の問題はMS SQL ServerとOracleでした。
私がやったことはNHibernateのための2つの別々の設定ファイルを作成することです:
sql.nhibernate.config
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<reflection-optimizer use="false" />
<session-factory name="BpSpedizioni.MsSql">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<!-- <property name="connection.connection_string">Data Source=(local); Initial Catalog=NHibernate; Trusted_Connection=true;</property> -->
<property name="current_session_context_class">web</property>
<property name="adonet.batch_size">100</property>
<property name="command_timeout">120</property>
<property name="max_fetch_depth">3</property>
<property name='prepare_sql'>true</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="BpSpedizioni.Services"/>
</session-factory>
</hibernate-configuration>
ora.nhibernate.config
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<reflection-optimizer use="false" />
<session-factory name="BpSpedizioni.Oracle">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<!-- <property name="connection.connection_string">Data Source=(local); Initial Catalog=NHibernate; Trusted_Connection=true;</property> -->
<property name="current_session_context_class">web</property>
<property name="adonet.batch_size">100</property>
<property name="command_timeout">120</property>
<property name="max_fetch_depth">3</property>
<property name='prepare_sql'>true</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="BpSpedizioni.Services"/>
</session-factory>
</hibernate-configuration>
私はこの単純なクラスを使って、nhibernate SessionFactoryを構築します:
public class NHibernateSessionFactory
{
private ISessionFactory sessionFactory;
private readonly string ConnectionString = "";
private readonly string nHibernateConfigFile = "";
public NHibernateSessionFactory(String connectionString, string nHConfigFile)
{
this.ConnectionString = connectionString;
this.nHibernateConfigFile = nHConfigFile;
}
public ISessionFactory SessionFactory
{
get { return sessionFactory ?? (sessionFactory = CreateSessionFactory()); }
}
private ISessionFactory CreateSessionFactory()
{
Configuration cfg;
cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.nHibernateConfigFile));
// With this row below Nhibernate searches for the connection string inside the App.Config.
// cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName);
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, this.ConnectionString);
#if DEBUG
cfg.SetProperty(NHibernate.Cfg.Environment.GenerateStatistics, "true");
cfg.SetProperty(NHibernate.Cfg.Environment.ShowSql, "true");
#endif
return (cfg.BuildSessionFactory());
}
}
あなたは私が私のNHibernateSessionFactory接続文字列に渡す見ることができるように(私は私のアプリの設定ファイルに保存することを好む)とNHibernateの設定ファイルの(パスなし)の名前。
私は個人的にDIコンテナ(のStructureMap)を使用し、レジストリクラスを定義する非常にクールな何かを達成することができます:あなたが名前付きインスタンスを使用することが可能な
public class NhibernateRegistry : Registry
{
public NhibernateRegistry()
{
For<ISessionFactory>()
.Singleton()
.Add(new NHibernateSessionFactory(<oracle connection string>, "ora.nhibernate.config").SessionFactory)
.Named("OracleSF");
For<ISession>()
.HybridHttpOrThreadLocalScoped()
.Add(o => o.GetInstance<ISessionFactory>("OracleSF").OpenSession())
.Named("OracleSession");
For<ISessionFactory>()
.Singleton()
.Add(new NHibernateSessionFactory(<ms sql connection string>, "sql.nhibernate.config").SessionFactory)
.Named("MsSqlSF");
For<ISession>()
.HybridHttpOrThreadLocalScoped()
.Add(o => o.GetInstance<ISessionFactory>("MsSqlSF").OpenSession())
.Named("MsSqlSession");
}
}
を。
あなたのサービスの実現のために:あなたはコンストラクタを定義することができるのStructureMapレジストリクラスを使用してより 私のサービスは、層
public class OrdersService : IOrdersService
{
private readonly ISession SessionMDII;
private readonly ISession SessionSpedizioni;
public OrdersService(ISession sessionMDII, ISession sessionSpedizioni)
{
this.SessionMDII = sessionMDII;
this.SessionSpedizioni = sessionSpedizioni;
}
...
}
2
ユースケースが何であるかは不明ですが、2つのセッションファクトリを作成するだけで済みます。 1つはmySQLの方言、接続文字列などを使用し、もう1つはSQL Serverの等価物を使用します。
マッピングにカスタムSQLを含めないようにしてください。これは問題なく動作します。
関連する問題
- 1. クライアントとGKSessionを持つサーバの両方
- 2. 1台のサーバを使用してMySQLデータベースをミラーリングする方法
- 3. 同じサーバ上で2つのsshを使用する方法
- 4. mysqlサーバとsqlモバイルデータの同期
- 5. Microsoft SQL Server 2008 R2 Expressでテーブルを作成する方法
- 6. SQL Server Compact 4.0とNHibernateでTransactionScopeを使用する方法
- 7. リモートMySQLサーバ用のmysql-proxy
- 8. Pythonでリモートのmysqlサーバに接続する方法
- 9. MySQLサーバの整合性を「テストする」方法は?
- 10. Microsoft SQL Server 2008 R2を接続する方法
- 11. サーバAからサーバBにファイルをダウンロード/コピーする方法は?
- 12. リモートSQLサーバに接続するためのサーバ名を記述する正しい方法は何ですか?
- 13. 1つのプロジェクトでMongodbとMysqlの両方を使用する
- 14. mysqlサーバをRAD 7.5に設定する方法
- 15. APIサーバ用ボトルの使い方
- 16. Microsoft SQLリンクされたMySQLサーバ - PHPからクエリできません
- 17. Javaソケットを使用してクライアントとサーバ間でファイルを転送する方法
- 18. クライアントとサーバの両方の認証でTLSを使用して.NETからPostgreSQLに接続するには?
- 19. phpmyadminからmySQLサーバのIPアドレスを見つける方法
- 20. C#とSQL Server 2008:まずコードを使用する方法は?
- 21. ローカルMySQLデータを端末経由でリモートMySQLサーバにダンプする方法は?
- 22. RFTとPuTTyサーバの接続方法は?
- 23. mysqlサーバ用glibc 2.3のインストール
- 24. Tomcatの7は:Tomcatの7中のMySQLサーバにプールする方法に固有のデータソースの接続のMicrosoft Access
- 25. インスタンスメソッドとクラスメソッドの両方でメンバを使用する方法
- 26. SHA1()を使用する際、私のPHPサーバとMySQLサーバが異なるハッシュを生成する方法はありますか?
- 27. NHibernate Search - 複数のWebサーバ
- 28. 専用サーバでftpユーザを作成する最良の方法
- 29. nhibernateでsqlクエリを使用する方法ConfORM
- 30. 複数のMySQLサーバとコードネーム