複数の名前と値のペアを含む DomainType というテーブルと、一緒に属する行を識別する Domain 列があります。PackageType と ComponentType という 2 つの C# クラスがあり、どちらもこの同じテーブルにデータを格納し、ドメイン値はそれぞれ「PackageType」と「ComponentType」です。hbm.xml ファイルで NHibernate Discrimator の概念を使用してこれらを定義できると思っていましたが、アプリで PackageTypes をクエリするたびに、DomainType テーブルからすべての行が返されます。
この時点で、マッピング ロジック/構文が悪いのか、それともディスクリミネータの概念を誤解しているだけなのかわかりません。これらは結局サブクラスではないので、これは正しい戦略ではないかもしれません (?)。
これが私の PackageType テーブルのマッピング ファイルです。
<class name="PackageType" table="DomainType"
discriminator-value="PackageType" dynamic-update="true">
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<discriminator column="Domain" type="AnsiString" not-null="true" />
<property name="Description" column="Description"
type="AnsiString" length="100" not-null="true" />
</class>
DomainType テーブルからすべての行 (Domain="ComponentType" の行も含む) を返す C# コードを次に示します。
IEnumerable<PackageType> rslt = GetSession().Query<PackageType>().ToList();