15 Stimmen

Datenüberprüfung in NHibernate und SqlServer

Ich verwende NHibernate in einem Projekt und muss eine Datenüberprüfung durchführen. Ich fand 本論文 auf codeproject, in dem die Schnittstelle IInterceptor behandelt wird.

Was ist Ihre bevorzugte Methode zur Prüfung von Daten? Verwenden Sie Datenbank-Trigger? Verwenden Sie etwas Ähnliches wie das, was in diesem Artikel beschrieben wird?

14voto

Sean Carpenter Punkte 7651

Für NHibernate 2.0 sollten Sie sich auch die Ereignis-Listener . Diese sind die Weiterentwicklung der IInterceptor-Schnittstelle und werden von uns erfolgreich für Audits eingesetzt.

5voto

DavidWhitney Punkte 4060

[EDIT]

Nach der Veröffentlichung von NH2.0 sollten Sie sich die unten vorgeschlagenen Event Listener ansehen. Meine Antwort ist veraltet.


Der IInterceptor ist der empfohlene Weg, um Daten in nhibernate auf nicht-invasive Weise zu ändern. Er ist auch nützlich für die Ent-/Verschlüsselung von Daten, ohne dass Ihr Anwendungscode davon Kenntnis erlangen muss.

Trigger auf der Datenbank verlagern die Verantwortung für die Protokollierung (eine Anwendungsangelegenheit) in die DBMS-Schicht, wodurch Ihre Protokollierungslösung effektiv an Ihre Datenbankplattform gebunden wird. Durch die Kapselung der Protokollierungsmechanismen in der Persistenzschicht bleiben die Plattformunabhängigkeit und die Transportierbarkeit des Codes erhalten.

Ich verwende Interceptors im Produktionscode, um in einigen großen Systemen Audits durchzuführen.

3voto

Jon Limjap Punkte 92084

Ich bevorzuge den von Ihnen erwähnten CodeProject-Ansatz.

Ein Problem mit Datenbank-Triggern ist, dass Ihnen keine andere Wahl bleibt, als Integrated Security in Verbindung mit ActiveDirectory als Zugang zu Ihrem SQL Server zu verwenden. Der Grund dafür ist, dass Ihre Verbindung die Identität des Benutzers erben sollte, der die Verbindung ausgelöst hat. Wenn Ihre Anwendung ein benanntes "sa"-Konto oder andere Benutzerkonten verwendet, wird das Feld "Benutzer" nur "sa" wiedergeben.

Dies kann durch die Erstellung eines benannten SQL Server-Kontos für jeden einzelnen Benutzer der Anwendung umgangen werden, aber dies ist z. B. für nicht intranetbasierte, öffentlich zugängliche Webanwendungen unpraktisch.

3voto

Ian Nelson Punkte 53679

Mir gefällt der erwähnte Interceptor-Ansatz, und ich verwende ihn bei dem Projekt, an dem ich gerade arbeite.

Ein offensichtlicher Nachteil, der hervorgehoben werden sollte, ist jedoch, dass bei diesem Ansatz nur Datenänderungen, die über Ihre Anwendung vorgenommen werden, geprüft werden können. Alle direkten Datenänderungen, wie z. B. Ad-hoc-SQL-Skripte, die Sie von Zeit zu Zeit ausführen müssen (das kommt immer vor!), werden nicht geprüft, es sei denn, Sie denken daran, gleichzeitig die Tabelleneinfügungen zu prüfen.

3voto

Rohit Agarwal Punkte 4269

Ich verstehe, dass dies eine alte Frage ist. Aber ich möchte sie im Lichte des neuen Event-Systems in NH 2.0 beantworten. Event Listener sind besser für Auditing-ähnliche Funktionen geeignet als Interceptors. Ayende hat letzten Monat ein großartiges Beispiel in seinem Blog geschrieben. Hier ist die URL zu seinem Blogbeitrag -

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X