2009-06-16 14 views
12

Ich habe eine generische ASP.NET (MVC) -Anwendung, die NHibernate als Modell Persistenzschicht und ASP.NET Mitgliedschaft/Rolle/Profil verwendet Dienste als Benutzerverwaltungsschicht.Best Practice zum Beitritt nhibernate und ASP.NET Mitgliedschaft/Rolle/Profildienst

Die Frage ist, was als die beste Methode angesehen werden kann, Verknüpfungen zwischen den Domänendaten und den Benutzern zu erstellen. (Zum Beispiel möchte ich ein Forumsystem erstellen, ich möchte jeden Themen/Beiträge mit einem bestimmten Benutzer verknüpfen und den Benutzer bei jeder Anfrage anzeigen).

Dies sind die posiibilites Ich habe von gedacht:

  1. Speichern Sie die Benutzer-ID in NHibernate (wie mit einer Guid Spalte in allen Ihren Domain-Klassen (Beiträge, Themen etc.), die verweisen muss ein Benutzer) und verwenden GetUser jedes Mal, wenn Sie den Namen des Benutzers aus der GUID benötigen (was zu n + 1 Abfragen führen kann)

    B-Variante: Alternativ können Sie auch den Benutzernamen speichern.

  2. Verwenden Sie die gleiche Datenbank, und erstellen Sie ein schreibgeschütztes NHibernate-Objekt für den verwalteten Domänenbenutzer, das den gleichen Daten wie die M/R/P-Dienste entspricht.
  3. Vergiss M/R/P und erstelle einen separaten Benutzerverwaltungsdienst basierend auf NHibernate
  4. Vergiss beides und benutze J2EE/RoR/merb/DJango/etc. (Bitte wählen Sie diese Option nicht :))
  5. andere ...
+0

Was tun Sie meinen mit "Benutzer-ID in NHibernate speichern"? – epitka

+0

Ich meine, ich speicher die Guid des Benutzers zum Beispiel in der Topic/Post/Comment/etc Klasse, und GetUserName aus dem Membershipprovider, um seinen richtigen Namen von der GUID zu bekommen. – SztupY

Antwort

6

ich für Schritt gehen würde 2 (fast, da es nicht unbedingt braucht nur lesbar zu sein) und erstellen Sie einen benutzerdefinierten Mitgliedschaftsanbieter für NHibernate.

Um Zeit zu sparen, können Sie eine vorhandene wie die von Manuel Abadia verwenden.

Damit behalten Sie die volle Leistung von NHibernate (Lazy Loading, etc.) und genießen Sie auch M/R/P-Dienste.

2

Es gibt auch eine NHibernate Basis-Mitgliedschaft Anbieter bei CodePlex