7

Estoy en la envidiable situación de tener que integrarme con una base de datos heredada, afortunadamente para propósitos de solo lectura, y he elegido usar NHibernate. Hasta ahora todo ha sido genial, pero tengo un nuevo requisito que me hace rascar la cabeza.Múltiples niveles de herencia con Fluent NHibernate usando discriminadores

Antes de hoy tenía una columna en la tabla que actuaría como un discriminador, pero ahora resulta que en algunos casos necesito tener más de una columna discriminatoria. ¿Es esto posible con NHibernate?

He estudiado el uso de fórmulas, que funciona, pero ahora tengo el problema de que necesito excluir subclases "desconocidas" (las que aún no tienen una asignación). Por ejemplo tengo esto:

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

Me gustaría ser capaz de filtrar todo lo que es 'desconocido' ...

Editar: Creo que una posible solución sería utilizar AlwaysSelectWithValue(), ¿Qué implicaciones tiene habilitar esto? Creo que es lo mismo que force en el mapeo nhibernate xml.

Respuesta

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

Intenté algo como esto, pero se queja de que discriminatorColumn no es una columna conocida. – jonnii

+1

* discriminatorColumn * debe ser la columna que está discriminando en la fórmula. A NH no le importa en absoluto la columna que está especificando, pero debe estar en la base de datos para ser útil – Firo

Cuestiones relacionadas