que tienen un objeto zona que tiene muchos niños subzona:NHibernate guardar/detectores de eventos de actualización: escucha de objeto secundario ahorra
public class Area
{
...
public virtual IList<SubArea> SubAreas { get; set; }
}
que los niños se asignan como una relación unidireccional no inversa:
public class AreaMapping : ClassMap<Area>
{
public AreaMapping()
{
HasMany(x => x. SubAreas).Not.Inverse().Cascade.AllDeleteOrphan();
}
}
El área es mi raíz agregada. Cuando guardo un área (por ejemplo, Session.Save (area)), el área se guarda y las SubAreas secundarias se conectan en cascada automáticamente.
Quiero agregar un detector de eventos de guardado o actualización para capturar siempre que mis áreas y/o se hayan conservado. Digamos, por ejemplo, que tengo un área que tiene 5 SubAreas. Si engancho en SaveEventListeners:
Configuration.EventListeners.SaveEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
Cuando guardo la zona, myListener solamente se dispara una vez sólo para el área (subáreas se ignoran). Quiero que las 5 SubAreas también sean atrapadas en el oyente del evento. Si engancho en SaveOrUpdateEventListeners lugar:
Configuration.EventListeners.SaveOrUpdateEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
Cuando guardo la zona, myListener es no dispararon en absoluto. Curiosamente, si engancho en SaveEventListeners y SaveOrUpdateEventListeners:
Configuration.EventListeners.SaveEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
Configuration.EventListeners.SaveOrUpdateEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
Cuando guardo la zona, myListener se dispara 11 veces: una vez para la zona, y dos veces para cada subárea! (Creo que porque NHIbernate está INSERTANDO la Subárea y luego ACTUALIZANDO con la clave externa de área).
¿Alguien sabe lo que estoy haciendo mal aquí, y cómo puedo hacer que el oyente dispare una vez para cada área y subárea?
¿Has trabajado en esto? teniendo el mismo problema – andy
Yo también! ¿Ha encontrado alguien una solución? – nozzleman