在NHibernate中将多个鉴别器值映射到单个默认类

Roh*_*wal 9 nhibernate inheritance nhibernate-mapping

我有一个包含数据的现有RoleType表.我试图使用每个类层次结构的表在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>
Run Code Online (Sandbox Code Playgroud)

这里,IRoleType是一个接口,具有实现者RoleA,RoleBRoleC.这有效.但这是问题 -

该表包含具有"额外"鉴别器值(2,3,5,6)的行,这些行未映射到持久类.这些值在域中已弃用,因此为每个值创建持久类没有用.但我们也无法从数据库中删除它们.

有没有办法将这些额外的行映射到单个"默认"类?如果没有,我还能怎样解决这个问题?

谢谢!

Die*_*hon 19

您可以通过将这些值映射到单个值来完成此操作.例:

<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" />
Run Code Online (Sandbox Code Playgroud)