7

Sono nell'invidiabile situazione di dover integrare con un database legacy, fortunatamente per scopi di sola lettura, e ho scelto di utilizzare NHibernate. Fino ad ora tutto è andato benissimo, ma ho una nuova esigenza che mi fa grattarmi la testa.Più livelli di ereditarietà con Fluent NHibernate utilizzando discriminatori

Prima di oggi avevo una colonna nella tabella che avrebbe agito da discriminatore, ma ora risulta che in alcuni casi ho bisogno di avere più di una colonna di discriminatori. È possibile con NHibernate?

Ho cercato di utilizzare le formule, che funzionano, ma ora ho il problema che ho bisogno di escludere sottoclassi 'sconosciute' (quelle che non hanno ancora una mappatura). Per esempio io ho questo:

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

mi piacerebbe essere in grado di filtrare tutto ciò che è 'sconosciuto' ...

Edit: Credo che una possibile soluzione potrebbe essere quella di utilizzare AlwaysSelectWithValue(), quali implicazioni ha questo? Credo che sia lo stesso di force nel file xml di mappatura nhibernate.

risposta

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

Ho provato qualcosa di simile, ma si lamenta che discriminatorColumn non è una colonna nota. – jonnii

+1

* discriminatorColumn * deve essere la colonna su cui si sta discriminando nella formula. NH non si cura affatto quale colonna si sta specificando, ma deve essere nel database per essere utile – Firo

Problemi correlati