2010-08-13 31 views
8

Tôi hiện có bảng RoleType có dữ liệu. Tôi đang cố gắng để ánh xạ bảng này trong NHibernate sử dụng Table per class hierarchy:Ánh xạ nhiều giá trị phân biệt đối xử vào một lớp mặc định duy nhất trong 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> 

Ở đây, IRoleType là một giao diện, với implementors RoleA, RoleBRoleC. Những công việc này. Nhưng đây là vấn đề -

Bảng chứa các hàng có giá trị phân biệt "phụ" (2,3,5,6) không được ánh xạ tới một lớp liên tục. Các giá trị này không được chấp nhận trong miền, do đó, nó không hữu ích để tạo lớp liên tục cho mỗi miền. Nhưng chúng tôi cũng không thể xóa chúng khỏi cơ sở dữ liệu.

Có cách nào để ánh xạ các hàng bổ sung này thành một lớp "mặc định" duy nhất không? Nếu không, làm thế nào khác tôi có thể giải quyết vấn đề này?

Cảm ơn!

Trả lời

17

Bạn có thể thực hiện việc này bằng cách ánh xạ các giá trị đó thành một giá trị duy nhất. Ví dụ:

<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" /> 
Các vấn đề liên quan