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. mysql両サーバにデータを送信する方法
- 2. クライアントとGKSessionを持つサーバの両方
- 3. サーバ内でmysqlサーバにアクセスする方法は?
- 4. mysqlサーバとの接続方法.......?
- 5. SQLサーバとMySQLの対応
- 6. PHPを使用してリモートmysqlサーバに接続する方法
- 7. GROUP BY(MySQLとSQLサーバ)
- 8. MySQL Workbenchでmysqlサーバを公開する方法
- 9. dockerでmysqlサーバを使用する最も良い方法は何ですか?
- 10. PHPはmysqlサーバまたはMS SQLサーバを使用しますか?
- 11. MysqlとSQLサーバとのデータベース統合
- 12. .net framework 4.6.1と4.6.2の両方をサーバにインストールするには?
- 13. Microsoft SQL Server 2008 R2 Expressでテーブルを作成する方法
- 14. SQL Server Compact 4.0とNHibernateでTransactionScopeを使用する方法
- 15. mysqlサーバ5.6を使用してテーブルのIDカラムを追加する方法は?
- 16. 1台のサーバを使用してMySQLデータベースをミラーリングする方法
- 17. mysqlサーバとsqlモバイルデータの同期
- 18. 同じサーバ上で2つのsshを使用する方法
- 19. Luceneを私のサーバで使用する方法
- 20. wpmserver64の代わりにphpmyadminにMySQLサーバを使用する方法
- 21. はSQLサーバにasync sqlクエリを書く方法です
- 22. サーバ上でsqlのシステム変数を変更する方法
- 23. オレンジSQLテーブルウィジェットをリモートSQLサーバに接続する方法
- 24. リモートMySQLサーバ用のmysql-proxy
- 25. Pythonでリモートのmysqlサーバに接続する方法
- 26. Cordovaを使用してSqliteデータをSQLサーバに同期する方法
- 27. Microsoft SQL Server 2008 R2を接続する方法
- 28. 同じNodeJsサーバでMysqlとMongoDBを使用するには?
- 29. MySQLサーバの整合性を「テストする」方法は?
- 30. phpmyadminなしでサーバからmysqlにアクセスする方法