7

Tôi đang ở trong tình huống tuyệt vời của việc phải tích hợp với cơ sở dữ liệu cũ, may mắn cho mục đích chỉ đọc và đã chọn sử dụng NHibernate. Cho đến bây giờ mọi thứ đều tuyệt vời, nhưng tôi có một yêu cầu mới khiến tôi gãi đầu.Nhiều cấp độ thừa kế với Fluent NHibernate bằng cách sử dụng phân biệt đối xử

Trước ngày hôm nay tôi có một cột trong bảng sẽ hoạt động như một kẻ phân biệt đối xử, nhưng bây giờ nó chỉ ra rằng trong một số trường hợp, tôi cần phải có nhiều hơn một cột phân biệt đối xử. Điều này có thể thực hiện với NHibernate không?

Tôi đã xem xét sử dụng các công thức, công thức, nhưng bây giờ tôi có vấn đề mà tôi cần phải loại trừ các lớp con 'không xác định' (các lớp con chưa có ánh xạ). Ví dụ tôi có điều này:

DiscriminateSubClassesOnColumn("") 
    .Formula("case ... when ... then ... when .. then ... else 'unknown' end"); 

Tôi muốn để có thể lọc ra tất cả mọi thứ đó là 'vô danh' ...

Chỉnh sửa: Tôi nghĩ rằng một giải pháp có thể sẽ được sử dụng AlwaysSelectWithValue(), những gì tác động nào cho phép điều này có? Tôi tin rằng nó giống như force trong bản đồ xml.

Trả lời

2
public BaseClassMap() 
{ 
    Where("discriminatorColumn <> 'unknown'"); 
    // or 
    Where("discriminatorColumn = 'known1' or discriminatorColumn = 'known2'"); 
} 
+0

Tôi đã thử một cái gì đó như thế này, nhưng nó phàn nàn rằng discriminatorColumn không phải là một cột được biết đến. – jonnii

+1

* discriminatorColumn * phải là cột bạn đang phân biệt đối xử trong công thức. NH không quan tâm đến tất cả các cột mà bạn chỉ định, nhưng nó phải nằm trong cơ sở dữ liệu hữu ích – Firo

Các vấn đề liên quan