2010-08-13 29 views
8

'da tek bir varsayılan sınıf için birden fazla diskriminatörü değer eşleme Veri var olan bir RoleType tablo var. Ben Table per class hierarchy kullanarak NHibernate bu tabloyu harita çalışıyorum: BuradaNHibernate

<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 bir arayüz, implementors ile RoleA, RoleB ve ROLEC. Bu çalışıyor. Ama burada sorun -

Tablo, kalıcı bir sınıfa eşlenmemiş "ekstra" ayrımcı değerleri (2,3,5,6) içeren satırlar içeriyor. Bu değerler alandan kaldırılır, bu nedenle her biri için kalıcı bir sınıf oluşturmak yararlı olmaz. Ancak bunları veritabanından da silemeyiz.

Bu ekstra satırları tek bir "varsayılan" sınıfla eşlemek için bir yol var mı? Değilse, bu sorunu nasıl çözebilirim?

Teşekkürler!

cevap

17

Bu değerleri tek bir ile eşleştirerek bunu yapabilirsiniz. Örnek:

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