Daten der Überwachung in NHibernate und SQL Server
Bin ich mit NHibernate für ein Projekt und ich brauche zu tun, Daten-auditing. Ich fand dieser Artikel auf codeproject die beschreibt die IInterceptor-Schnittstelle.
Was ist Ihre bevorzugte Art von auditing-Daten? Verwenden Sie Datenbank-Trigger? Haben Sie so etwas ähnlich zu dem, was ist, Lesen Sie bitte im Artikel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für NHibernate 2.0, sollten Sie auch einen Blick auf Ereignis-Listener. Diese sind die Weiterentwicklung der IInterceptor Schnittstelle und wir nutzen Sie erfolgreich für die überwachung.
[BEARBEITEN]
Post-NH2.0 Version, schauen Sie bitte in den Event-Listener, wie unten vorgeschlagen. Meine Antwort ist veraltet.
Den IInterceptor ist die empfohlene Vorgehensweise zum ändern von Daten in nhibernate in einer nicht-invasive Weise. Es ist auch nützlich für die Entschlüsselung /Verschlüsselung der Daten, ohne den Anwendungs-code kennen zu müssen.
Trigger auf der Datenbank, verschieben die Verantwortung der Protokollierung (eine Anwendung betreffen) in das DBMS Schicht, die effektiv verbindet Ihren logging-Lösung, um Ihre Datenbank-Plattform. Durch die Kapselung der überwachung mechanik in den Persistenz-layer, den Sie behalten, Plattform-Unabhängigkeit und code-Portabilität.
Ich benutze Abfangjäger in der Produktion code auditing in wenige große Systeme.
Bevorzuge ich die CodeProject Ansatz, den Sie erwähnt.
Einem problem mit der Datenbank-Triggern ist, dass es lässt Sie keine Wahl aber verwenden Sie die Integrierte Sicherheit, gepaart mit ActiveDirectory, wie der Zugriff auf Ihren SQL Server. Der Grund dafür ist, dass Ihre Verbindung sollten die Erben die Identität des Benutzers an, löste die Verbindung, wenn Ihre Anwendung verwendet den Namen "sa" - Konto oder eine andere Benutzer-accounts, die "Benutzer" - Feld wird nur reflektieren "sa".
Diese kann überschrieben werden, durch erstellen einer benannten SQL Server-Konto für jeden Benutzer der Anwendung, aber das wird unpraktisch für nicht-intranet, public facing web-Anwendungen, zum Beispiel.
Ich mag die Interceptor-Ansatz erwähnt, und verwenden Sie diese auf das Projekt bin ich derzeit auf.
Jedoch einen offensichtlichen Nachteil, der es verdient Hervorhebung, dass dieser Ansatz nur von audit-Daten änderungen, die Sie über Ihre Anwendung. Direkte Daten-Modifizierungen wie ad-hoc-SQL-Skripts, die Sie möglicherweise ausführen müssen, von Zeit zu Zeit (es passiert immer!) werden nicht geprüft, es sei denn, Sie daran zu erinnern, führen Sie die audit-Tabelle Einfügungen zur gleichen Zeit.
Ich verstehe, das ist eine alte Frage. Aber ich möchte diese Antwort in das Licht der neuen Event-System in NH 2.0. Ereignis-Listener sind besser für die überwachung-wie-Funktionen als Abfangjäger. Ayende schrieb ein großartiges Beispiel auf seinem blog im letzten Monat. Hier ist die URL zu seinem blog-post -
ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx
Als einen ganz anderen Ansatz, Sie könnte verwenden Sie die Dekorator-Muster mit Ihren repositories.
Sagen, ich habe
Dann hätten wir unsere NHibernateRepository:
Dann könnten wir mit einem Audit-Repository:
Dann, mit ein IoC-Framework (StructureMap, Schloss Windsor, NInject), könnten Sie bauen es alle nach oben, ohne den rest des Codes jeder zu wissen, Sie hatte auditing geht.
Natürlich, wie Sie die Prüfung der Elemente der Kaskaden-Sammlungen ist ein anderes Thema ganz...