Aquí es mi jerarquía:NHibernate discriminado Las subclases de un Usuario-Subclase
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"
Aquí está mi asignaciones en dos archivos HBM separadas:
<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>
La siguiente es la excepción consigo:
MappingException: error de validación de XML: el elemento 'joined-subclass' en el espacio de nombres 'urn: nhibernate-mapping-2.2' tiene un elemento secundario no válido 'discriminator' en el espacio de nombres 'urn: nhibernate-mapping-2.2'.
¿Qué me estoy perdiendo? ¿No se puede mapear una jerarquía de subclases discriminada de una subclase unida?
Entonces, si entiendo esto bien, ¿no puedo mezclar diferentes estrategias de herencia? Básicamente, si cada clase finalmente desciende de una clase base como "Entidad", entonces tengo que elegir una estrategia y eso es todo para la jerarquía completa. Entiendo que no puedo mezclar en el mismo nivel, pero ¿hay alguna posibilidad de que sea compatible con diferentes niveles en el futuro? –
@Travis, ¿hay algún motivo por el que quiera tener una mesa para Entity? – Vadim
Sí; hay 6 campos que son comunes a todas mis entidades [Id, IsActive, DateCreated, Creator, DateModified, Modifier]. Pero incluso si no necesitara Entity, el Usuario tomaría su lugar en una situación similar si tuviera que extender Contractor o Empleado. –