De modo que todo funciona bien con el mapeo discriminador básico. Puedo interactuar directamente con las entidades A y B sin ningún problema.Entidad fluida NHibernate HasMany colecciones de diferentes tipos de subclase
public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}
Esta Mapas sin drama en el mapeo BaseType como
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<BaseType>("A", m => { })
.SubClass<BaseType>("B", m => { });
El problema se produce cuando: en un agregado que queremos mapear colecciones para cada subclase
a través de cartografía, como a continuación
public class AggregateMap: BaseMap<Aggregate>
{
public AggregateMap()
{
HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();
}
}
obviamente no son mapeos completos, pero son la cantidad mínima para descifrar lo que estoy intentando. Los elementos agregados a ACollection y BCollection se conservan correctamente a través de la cascada cuando se guarda Agregado. Sin embargo, cuando se recupera el agregado, hay confusión sobre la discriminación de tipo.
He corrido tantas soluciones posibles diferentes que ya no sé lo que no funcionó. Siento que no debería tener que proporcionar una cláusula WHERE en las colecciones, pero las cosas simplemente no funcionan para mí.
Cualquier pista sería apreciada.
Por "confusión sobre la discriminación de tipo", ¿quiere decir que ambos conjuntos están devolviendo todos los tipos? Independientemente de su discriminador? –
Me queda trabajo ahora, así que no puedo recordar el error exacto. Algo así como 'No se pudo cargar la entidad del tipo EntityA porque no coincide con la EntityB especificada'. Hemos hackeado una cláusula Where usando una cadena en la asignación HasMany y que se está filtrando manualmente a través de la columna de discriminador. Solo pensé que el tipo 'fluiría' y la decisión donde se realizaría automáticamente. – berko
Y sí, para responder a su pregunta directamente ... Creo que está intentando cargar todos los tipos independientemente del discriminador. – berko