2010-08-13 6 views
8

J'ai une table existante RoleType avec des données. Je suis en train de cartographier ce tableau à l'aide NHibernate Table per class hierarchy:Mappage de plusieurs valeurs de discriminateur à une seule classe par défaut dans 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> 

Ici, IRoleType est une interface, avec implementors RoleA, RoleB et ROLEC. Cela marche. Mais voici le problème -

La table contient des lignes avec des valeurs de discriminateur «extra» (2,3,5,6) qui ne sont pas mappées à une classe persistante. Ces valeurs sont obsolètes dans le domaine, il n'est donc pas utile de créer une classe persistante pour chacun. Mais nous ne pouvons pas non plus les supprimer de la base de données.

Existe-t-il un moyen de mapper ces lignes supplémentaires à une seule classe "par défaut"? Sinon, comment puis-je résoudre ce problème?

Merci!

Répondre

17

Vous pouvez le faire en mappant ces valeurs sur une seule. Exemple:

<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" /> 
Questions connexes