2010-08-13 5 views
8

Ich habe eine vorhandene RoleType Tabelle mit Daten. Ich versuche, diese Tabelle in NHibernate Table per class hierarchy zur Karte:Zuordnung mehrerer Diskriminatorwerte zu einer einzelnen Standardklasse in 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> 

Hier IRoleType ist eine Schnittstelle, mit Implementierer RoleA, roleb und Rolec. Das funktioniert. Aber hier ist das Problem -

Die Tabelle enthält Zeilen mit "extra" Diskriminator Werte (2,3,5,6), die nicht auf eine persistente Klasse zugeordnet sind. Diese Werte sind in der Domäne veraltet, daher ist es nicht sinnvoll, persistente Klassen für jede Domäne zu erstellen. Aber wir können sie auch nicht aus der Datenbank löschen.

Gibt es eine Möglichkeit, diese zusätzlichen Zeilen einer einzelnen "Standard" -Klasse zuzuordnen? Wenn nicht, wie kann ich sonst dieses Problem lösen?

Danke!

Antwort

17

Sie können dies tun, indem Sie diese Werte einem einzigen zuordnen. Beispiel:

<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" /> 
Verwandte Themen