Ecco la mia gerarchia:NHibernate discriminati sottoclassi di una joined-subclass
class abstract Entity { /*members*/ } // mapped to entity table class abstract User : Entity { /*members*/ } // mapped to user table class Employee : User { /*no members*/ } // no table, discriminator = "E" class Contractor : User { /*no members*/ } // no table, discriminator = "C"
Ecco il mio mappature in due file HBM separati:
<class name="Entity" table="entity" xmlns="urn:nhibernate-mapping-2.2"> <id name="Id" column="id"> <generator class="guid.comb" /> </id> <property ... /> </class> <joined-subclass name="User" extends="Entity" table="user"> <key column="id" /> <discriminator column="type" /> <property ... /> <subclass name="Employee" discriminator-value="E" /> <subclass name="Contractor" discriminator-value="C" /> </joined-subclass>
Il seguente è l'eccezione ottengo:
MappingException: errore di convalida XML: l'elemento 'join-subclass' nello spazio dei nomi 'urn: nhibernate-mapping-2.2' ha l'elemento figlio 'discriminator' non valido nello spazio dei nomi 'urn: nhibernate-mapping-2.2'.
Cosa mi manca? Non puoi mappare una gerarchia di sottoclassi discriminata di una sottoclasse unita?
Quindi, se ho capito bene, non posso mescolare strategie di ereditarietà diverse? Fondamentalmente, se ogni classe discende in definitiva da una classe base come "Entity", allora devo scegliere una strategia ed è questa per l'intera gerarchia. Capisco di non essere in grado di mixare allo stesso livello, ma c'è qualche possibilità che questo sarà supportato per diversi livelli in futuro? –
@Travis, c'è un motivo per cui vuoi avere una tabella per Entity? – Vadim
Sì; ci sono 6 campi comuni a tutte le mie entità [Id, IsActive, DateCreated, Creator, DateModified, Modifier]. Ma anche se non avessi bisogno di Entity, User avrebbe preso il suo posto in una situazione simile se avessi avuto bisogno di estendere il Contraente o il Dipendente. –