isessionfactory fluently c# .net nhibernate fluent-nhibernate event-listener

c# - isessionfactory sessionfactory fluently configure()



¿Cómo agregar un detector de eventos mediante Fluent NHibernate? (3)

Entonces, respuesta tardía, pero por el bien de la posteridad, para agregar oyentes sin eliminar a los oyentes de registro existentes (como lo hará la respuesta anterior de Bengt Be):

var config = new Configuration (); config.AppendListeners (ListenerType.PreUpdate, new [] { new AuditEventListener () });

etc.

Quiero agregar un detector de eventos ( IPreUpdateEventListener ) para agregar NHibernate pero parece que no puedo encontrar un ejemplo al usar una configuración fluida.

Quiero poder agregar el escucha cuando creo la fábrica de sesiones, por ejemplo, cuando se ejecuta el siguiente código.

_sessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<IEntity>()) .BuildSessionFactory();

Alguien sabe cómo hacer esto?


Respuesta tardía, encontré tu pregunta cuando intentaba hacer lo mismo. Encontré una solución que debería funcionar:

_sessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>()) .ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});


Resucitando a los muertos aquí, pero esto:

........ .ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});

Debiera ser:

.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[] { new AuditEventListener() });

Creo que el método ''SetListener'' (descrito en otra respuesta) también eliminaría a todos los oyentes anteriores.

Si te gusta algo más dinámico, puedes hacer esto:

private void AddListenerToConfiguration<T>(FluentConfiguration config, params ListenerType[] typesForListener) where T : class { var listener = Activator.CreateInstance<T>(); config.ExposeConfiguration(x => { foreach (var listenerType in typesForListener) { x.AppendListeners(listenerType, new T[] { listener }); } }); }

Y luego llamar a algo como esto:

AddListenerToConfiguration<AuditEventListener>(smFactory, ListenerType.PreUpdate);

Esto permite un código más limpio mientras observa la configuración de Fluent. También le permite registrar fácilmente un solo tipo para varios tipos de oyentes.

En cuanto a eliminar los escuchas predeterminados, no los eliminaría a menos que tenga un escuchador que herede de la implementación del escuchador predeterminado y llame a base.METHODNAME en los métodos anulados o que replique el mismo comportamiento que el de los oyentes predeterminados.