Pregunta

Estoy usando NHibernate en un proyecto y necesito hacer la auditoría de datos.He encontrado este artículo en codeproject que trata de la IInterceptor de la interfaz.

¿Cuál es tu forma preferida de datos de auditoría?¿El uso de disparadores de base de datos?¿Utiliza algo similar a lo que se dicussed en el artículo?

¿Fue útil?

Solución

NHibernate 2.0, usted también debe mirar a Los Detectores De Eventos.Estos son la evolución de la IInterceptor interfaz y hemos de utilizar con éxito para la auditoría.

Otros consejos

[EDITAR]

Post NH2.0 liberación, por favor, busque en el Caso de los Oyentes como se sugiere a continuación.Mi respuesta es obsoleta.


El IInterceptor es la forma recomendada para modificar cualquier dato en fluent en un no-invasivo de la moda.También es útil para el descifrado / cifrado de datos sin el código de la aplicación que necesite saber.

Los desencadenadores de la base de datos está moviendo la responsabilidad de registro (una aplicación preocupación) en DBMS capa que efectivamente lazos de su solución de registro a la base de datos de la plataforma.Mediante la encapsulación de la auditoría de la mecánica en la persistencia de la capa de retener la plataforma de independencia y el código de transportabilidad.

Yo uso Interceptores en el código de producción para proporcionar a la auditoría en un par de grandes sistemas.

Yo prefiero el CodeProject enfoque que usted ha mencionado.

Uno de los problemas con la base de datos de los factores desencadenantes es que te deja sin ninguna opción pero para el uso Integrado de Seguridad junto con ActiveDirectory, como el acceso a SQL Server.La razón para esto es que la conexión debe heredar la identidad del usuario que activa la conexión;si su aplicación utiliza un nombre de cuenta "sa" o de otras cuentas de usuario, el campo "user" sólo reflejará "sa".

Esto puede ser anulada por la creación de una instancia con nombre de SQL Server cuenta para cada usuario de la aplicación, pero esto va a ser poco práctico para los no-intranet, a la vista del público las aplicaciones web, por ejemplo.

Me gusta el Interceptor enfoque mencionado, y usar esto en el proyecto en el que estoy trabajando actualmente.

Sin embargo, una desventaja evidente que merece destacar es que este enfoque sólo a los datos de auditoría de los cambios realizados a través de su aplicación.Cualquier daño directo modificaciones de datos, tales como ad-hoc de secuencias de comandos SQL que se necesita ejecutar de vez en cuando (siempre me pasa!) no ser objeto de auditoría, a menos que se acuerde realizar la auditoría de la tabla de inserciones en el mismo tiempo.

Entiendo que esta es una vieja cuestión.Pero me gustaría responder a esta en la luz del nuevo Sistema de Eventos en NH 2.0.Los detectores de eventos son mejores para auditoría-como-funciones de los Interceptores.Ayende escribió un gran ejemplo en su blog el mes pasado.Aquí está la URL de su blog -

ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

Como un enfoque totalmente diferente, se podría utilizar el patrón decorador con sus repositorios.

Decir que tengo

public interface IRepository<EntityType> where EntityType:IAuditably
{ 
    public void Save(EntityType entity);
}

Entonces, tendríamos a nuestro NHibernateRepository:

public class NHibernateRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       session.SaveOrUpdate(entity);
   }
}

Entonces podríamos tener una Auditoría Repositorio:

public class AuditingRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       entity.LastUser = security.CurrentUser;
       entity.LastUpdate = DateTime.UtcNow;
       innerRepository.Save(entity)
   }
}

Luego, utilizando un Cio Marco (StructureMap, el Castillo de Windsor, NInject) se puede construir todo esto sin que el resto de su código de cada sabiendo que había auditoría pasando.

Por supuesto, cómo de auditoría de los elementos de la cascada de las colecciones es otro tema totalmente...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top