Ich hätte gerne einen Verweis zwischen zwei Entitäten, die in der RavenDB-Dokumentendatenbank gespeichert sind. Da dies keine relationale db ist, weiß ich, dass ich die Denormized Reference-Technik verwenden sollte, die in der RavenDB-Dokumentation beschrieben wird. Während dies zunächst gut zu sein scheint, fühlt sich die Bemühung, all diese Referenzen auf dem neuesten Stand zu halten, als unverhältnismäßig an, sobald ich anfange, eine echte "Hierarchiestufe" mit bidirektionalen Referenzen zu schaffen. Ich denke, ich könnte irgendwo falsch liegen.
Können Sie den besten / einfachsten Weg erklären, eine relativ komplexe Domänenhierarchie mit RavenDB zu modellieren?
Danke
Ich bin mir nicht sicher, ob dies weit genug gehen wird, um Ihre Frage zu beantworten, aber hier geht es darum, eine denormalisierte Referenz in RavenDB zu erstellen (diese wird aus echtem Code entnommen, wobei nicht wesentliche Elemente zur besseren Übersicht entfernt werden)
Domäne
%Vor% Sie können sehen, dass ich eine Klasse Assessment
habe, die auf ein User
verweist. Diese Benutzerreferenz wird mithilfe der Klasse UserReference
verwaltet.
Denormalisierte Referenz
%Vor% Beachten Sie, dass die Referenzklasse auch UserName
enthält. Dieser Wert ändert sich nicht sehr oft, aber er kann sich ändern. Deshalb müssen wir die Eigenschaft UserName
in der Eigenschaft UserReference
in der Klasse Assessment
aktualisieren. Um die Änderung vorzunehmen, müssen wir zuerst die korrekten Assessment
Instanzen von RavenDB finden und dafür benötigen wir einen Index.
Raven-Index
%Vor% Dieser Index muss immer aufgerufen werden, wenn der Wert User
UserName
aktualisiert wird. Ich habe eine UserService
-Klasse, die mir hilft, alle meine benutzerbezogenen Funktionen zu koordinieren, daher stelle ich diesen Code dort ein.
Ich verwende diesen Code für andere Referenzen, so dass er etwas abstrahiert wurde. Dies kann Ihnen dabei helfen, komplexere Hierarchien (oder vielleicht eine bessere Beschreibung) zu erstellen.
UserService
%Vor%Das ist es. Und weißt du, jetzt, wo ich alles verraten habe, kann ich sehen, was du meinst. Es ist viel Arbeit, nur um eine Referenz zu aktualisieren. Vielleicht kann der Dienstcode DRYer gemacht und für verschiedene Beziehungstypen wiederverwendet werden, aber ich sehe nicht, wie man vom Schreiben zahlreicher Indizes, einer pro referenziertem Typ, wegkommt.
Tags und Links ravendb