我有一个包含数据的 RoleType 表。我正在尝试使用Table per class hierarchy:
在NHibernate中映射此表<class name="IRoleType" table="RoleType">
<id name="Id" column="RoleID">
<generator class="native" />
</id>
<discriminator column="RoleID" />
<property name="Description" column="Description" />
<!-- ... more properties ... -->
<subclass name="RoleA" discriminator-value="1" />
<subclass name="RoleB" discriminator-value="4" />
<subclass name="RoleC" discriminator-value="7" />
</class>
此处, IRoleType 是一个界面,实施者 RoleA , RoleB 和 RoleC 。这有效。但这是问题 -
该表包含具有“额外”鉴别器值(2,3,5,6)的行,这些行未映射到持久类。这些值在域中已弃用,因此为每个值创建持久类没有用。但我们也无法从数据库中删除它们。
有没有办法将这些额外的行映射到单个“默认”类?如果没有,我还能怎样解决这个问题?
谢谢!
答案 0 :(得分:18)
您可以通过将这些值映射到单个值来完成此操作。例如:
<discriminator
formula="case when RoleID in (2,3,5,6) then 0 else RoleId end" />
<subclass name="RoleA" discriminator-value="1" />
<subclass name="RoleB" discriminator-value="4" />
<subclass name="RoleC" discriminator-value="7" />
<subclass name="DefaultRole" discriminator-value="0" />