質問: 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 ... 敬具、 ライアン
回答: 一般的に、実行可能ファイルには、(流暢な構成の残りの部分と同様に)慣例を設定します。 つまり、あなたのGUI、ユニットテスト、およびあなたの `ISession` / `ISessionFactory` ベースのサービスを消費しているもので、異なる流暢な構成を持つことになります。 あなたの設定をハードコーディングしたように私には聞こえますが、現在、環境に関する情報によっては、「コンフィギュレータ」を別の方法で動作させる方法を理解しようとしています。 はるかに簡単な方法は、最上位レベルで構成を作成し、必要に応じて依存関係として提供することです。そうすれば、異なる環境から同じコードパスに慣れさせられることはありません。 それがNHibernateに依存するものであれ、コンストラクタの引数またはプロパティのセッターとして `ISession` または `ISessionFactory` を受け入れるように設定します。そうすれば、この問題は起こりません。実際にデータストアを照会する必要がないテストのために、それを嘲笑することさえできます。 もちろん、FNH設定を作成するクラスを設定して、設定可能な状態にしておき、設定行に条件文を使用することもできます。しかし、通常、FNHの設定はあまりにも少ないコード行で始めるので、それほど価値があるとは思われません。 SQL Server、Oracle、SQLiteなどのための完全に別々の構成を作成するだけです。マイナーな変更を行うたびに、常にそれを維持する必要はありません。