Fluent NHibernateのDB固有の規約

私はFluent NHibernateの規則のセットを持っていますが、そのほとんどはデータベースに依存しません。しかし、文字列プロパティのようなDBMSに依存するものがいくつかあります。

Public Sub Apply(ByVal instance As IPropertyInstance) Implements IConvention(Of IPropertyInspector, IPropertyInstance).Apply
    instance.CustomSqlType("VARCHAR2(50 BYTE)")
End Sub

本当に私は、DB生成(つまり、オブジェクトの最初の開発)のためにこのような規約を使用しています。これはすべてうまくいってオラクルにとってうまくいきますが、私はユニット内テストをインメモリのSQLite DBで行いたいのですが、SQLiteにはVARCHAR2型がないので、このコンベンションはうまくいきません。

このような状況でFluent NHibernateをどのように設定するかについては、誰も良いアドバイスやリファレンスを持っていますか?

現時点では、私は、データベースに依存せず、サブディレクトリ/名前空間に従属するものを持つ一般的な一連の規則を考えています。次に、特定のDBMSに関連付けられているものと同様に、すべての一般的な慣習を取り上げるカスタムITypeSourceコンポーネントを指定できるような設定をします。 SqlConventionTypeSource、OracleConventionTypeSource ...

敬具、 ライアン

0

1 答え

一般的に、実行可能ファイルには、(流暢な構成の残りの部分と同様に)慣例を設定します。

つまり、あなたのGUI、ユニットテスト、およびあなたの ISession / ISessionFactory ベースのサービスを消費しているもので、異なる流暢な構成を持つことになります。

あなたの設定をハードコーディングしたように私には聞こえますが、現在、環境に関する情報によっては、「コンフィギュレータ」を別の方法で動作させる方法を理解しようとしています。

はるかに簡単な方法は、最上位レベルで構成を作成し、必要に応じて依存関係として提供することです。そうすれば、異なる環境から同じコードパスに慣れさせられることはありません。

それがNHibernateに依存するものであれ、コンストラクタの引数またはプロパティのセッターとして ISession または ISessionFactory を受け入れるように設定します。そうすれば、この問題は起こりません。実際にデータストアを照会する必要がないテストのために、それを嘲笑することさえできます。

もちろん、FNH設定を作成するクラスを設定して、設定可能な状態にしておき、設定行に条件文を使用することもできます。しかし、通常、FNHの設定はあまりにも少ないコード行で始めるので、それほど価値があるとは思われません。 SQL Server、Oracle、SQLiteなどのための完全に別々の構成を作成するだけです。マイナーな変更を行うたびに、常にそれを維持する必要はありません。

0
追加された
@ライアン:これは依存性注入を使用している場合は問題ではないようです。実際にIoCを使用してインジェクションしているのですか、何らかのシングルトン/サービスロケータパターンに頼っていますか?テスト用に特別に異なる ISessionManager 実装を作成し、テストする必要があるものすべてに渡すことができるはずです。
追加された 著者 Aaronaught,
応答Aaronaughtをありがとう。
追加された 著者 Ryan.Bartsch,
FYI; Windsor IoCでNHibernateを設定するには、Castle.Facilities.NHibernateIntegrationライブラリを使用します。このようにして、NHibernateを使用するすべてのサービス/プレゼンターは、必須/オプションのクラス依存としてISessionManagerを使用して作成できます。私がサービスを解決すると、WindsorはISessionManagerの具体的な実装を注入します。基本的には、この機能を使用してセッション管理(セッションごとのオープンセッションなど)について心配する必要はあまりありません.ISessionManagerを巧みに使って単体テストを行うことができます。
追加された 著者 Ryan.Bartsch,
セッションファクトリのデフォルトコンフィグレーションをIConfigurationBuilderファシリティを介して変更することができます。ここでは、NHibernateセッションファクトリを慣習による自動マッピングを使用して流暢にコンフィグレーションします。私はFNHのAutoPersistenceModelにどこで慣習を見つけるべきかを伝える必要があります。これはかなり複雑で、明確に定義されており、変更することはないと考えられるので、再利用の良い候補です。これは私の慣習のうちのいくつかがDB特有のもの(すなわち、スキーマを生成するために使用されるもの)であるという私の元の問題に戻る。
追加された 著者 Ryan.Bartsch,