我有一个名为 DomainType 的表,其中包含几个名称/值对以及一个 Domain 列,该列标识属于一起的行。我有两个名为 PackageType 和 ComponentType 的 C# 类,它们都将它们的数据存放在同一个表中,它们的域值分别是“PackageType”和“ComponentType”。我以为我可以在我的 hbm.xml 文件中使用 NHibernate 鉴别器概念来定义这些,但每次我在我的应用程序中查询 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 表中所有行的 C# 代码(即使是 Domain="ComponentType" 的行):
IEnumerable<PackageType> rslt = GetSession().Query<PackageType>().ToList();