Als einen ganz anderen Ansatz könnten Sie das Decorator-Muster mit Ihren Repositories verwenden.
Say I
public interface IRepository<EntityType> where EntityType:IAuditably
{
public void Save(EntityType entity);
}
Dann haben wir unsere NHibernateRepository haben würde:
public class AuditingRepository<EntityType>:IRepository<EntityType>
{
/*...*/
public void Save (EntityType entity)
{
entity.LastUser = security.CurrentUser;
entity.LastUpdate = DateTime.UtcNow;
innerRepository.Save(entity)
}
}
Dann ein IoC mit:
public class NHibernateRepository<EntityType>:IRepository<EntityType>
{
/*...*/
public void Save (EntityType entity)
{
session.SaveOrUpdate(entity);
}
}
Dann könnten wir einen Prüfungs Repository haben Framework (StructureMap, Castle Windsor, NInject) können Sie alles ohne den Rest Ihres Codes erstellen zu wissen, dass Auditing vor sich ging.
Natürlich, wie Sie die Elemente von kaskadierten Sammlungen Prüfung ist ein anderes Thema ganz ...
Es gibt Abhilfen/Alternativen zu geben jedem Benutzer eine SQL-Konto oder über integrierte Auth. Sie können eine "LastUpdatedByUser" -Spalte in Ihrer zu überwachenden Tabelle erstellen und sie bei jeder Aktualisierung eines Datensatzes aus der App senden. Der Trigger kann den Wert dieser Spalte verwenden, um die Audit-Datensätze zu füllen. –