1

私は NHibernate の初心者であり、これが簡単な質問である場合は申し訳ありません。基本的に、他のデータベースへのアクセスを含む 1 つのデータベースがあります。これが私のベースデータベースのレイアウトです。これは、他のデータベースのデータベース情報を含むテーブルです

--Databases--
Id
DatabaseName
DatabaseType
ConnectionString

ご覧のとおり、このテーブルには、維持されているすべてのデータベースが含まれています。データベースにリンクされているすべての列を含むテーブルを次に示します。

--Tables--
Id
Name
ColumnNames
DatabaseId

(Oracle、mysql、mssql、または postgresql) を含むさまざまな種類のデータベースがあります。それらはすべて、私のアプリケーションで異なる役割を果たします。各データベースのテーブルごとにマッピング xml ファイルを作成するには、非常に時間がかかります。

接続文字列を nhibernate に渡し、テーブルに対して単純なクエリを実行したいと思います。クエリの例を次に示します。

select * from table90182763 where id IS not NULL and id <> 0

この SQL クエリを NHibernate に直接渡すことはできますか? すべてのリクエストで接続文字列を nhibernate に効率的に渡すことはできますか?

4

1 に答える 1

2

session.CreateSQLQuery() を使用できますが、シナリオには欠点があります。

CreateSQLQuery を使用するには、各データベースのセッション マネージャー、ドメイン エンティティを結果から構築するためのファイルとクラスのマッピングなどが必要です。

NHibernate はエンティティにマップするため、生の SQL を記述して結果のデータテーブルを取得したい場合は、標準の ODBC ドライバーを使用して古い方法で処理してください。

NHibernate を使用すると、開発と保守が迅速かつ簡単になります。将来、新しい機能を迅速に保守および追加する必要がある場合は、NHibernate を正しく使用する必要があります。

強力な Craig Quillen が言うように、「それが正当なインフラストラクチャであり、将来的に時間と眠れない夜を節約できるなら、それは良い ROI です」.

任意の数のデータベース エンジン タイプを使用して、任意の数のデータベースにアクセスするように NHibernate を設定できます。IC コンテナーを使用してデータベース セッションを抽象化し、ほぼ透過的にすることもできます。

Code Configuration ( example here ) を使用して、それぞれ独自の ConnectionString、Dialect、および Driver を持ついくつかのセッション ファクトリを作成する必要があります。これらは、静的または「オンデマンド IoC」シングルトンとして作成されます。次に、ロードする必要があるエンティティに応じて、IoC ファクトリは正しい NHibernate セッション ファクトリからセッションを要求できます。

データベース テーブルから直接自動化された方法でマッピング ファイルとエンティティを生成するには、次のようなツールを使用します: http://nmg.codeplex.com/

于 2012-09-25T19:51:02.627 に答える