Ich muss genau das für eine sehr komplexe Menge von Objekten tun und was ich bisher gefunden habe ist:
NHibernate unterstützt dies nicht genau.
Wenn Sie versuchen, die ID eines Objekts, das Sie aus einer Sitzung erhalten haben, einfach zu ersetzen, erhalten Sie einen Nhibernate-Fehler: Der Bezeichner einer Instanz von wurde von & lt; 9ae3868d-17bf-4314-ba0c-4eb3b44b1a2e & gt; zu & lt; 2b2b67c6-a421-48c4-836c-4c27f6481718 & gt;
Wenn die Sitzung nicht mehr über die Objekte informiert ist, die sie abgerufen hat, d. h. wenn Sie sie vor dem Speichern und Leeren verwerfen, funktioniert jetzt nur das Ändern der IDs. So könnten Sie Code wie folgt schreiben:
%Vor%Das Problem dabei ist, dass, wenn Ihr Objektgraph eine Tiefe hat, Sie sicher sein müssen, das gesamte Set zu entfernen, und Sie dann möglicherweise die Originale in der Sitzung benötigen, müssen Sie sie noch einmal abrufen. Dies ist ein logistischer Kopfschmerz und führt zu Code mit sehr obskuren und verschlungenen Absichten.
Ich empfehle nicht.
Was häufiger gemacht wird, ist das Serialisieren in einen binären Stream und das Rekonstruieren dieses Stroms in eine neue Menge von Objekten. Fein, funktioniert aber nur, wenn Ihre Objekte alle serialisierbar sind.
Das ist nicht der Fall für mich, was ich mache ist, dass ich manuellen Code geschrieben habe, um tiefe Kopien eines Objektgraphen mit Hilfe von Kopierkonstruktoren zu erstellen. Dies ist komplex und kann auch zu Wartungsproblemen führen. Wenn die Objekte jedoch nicht serialisiert werden können, gibt es nur wenige bessere Alternativen.
Sorry, das tiefe Kopieren von Objekten bleibt eine komplizierte Aufgabe, wenn die Serialisierung keine Option ist.
Mach einfach new MyClass()
und kopiere alles außer der ID. Sie können dafür eine Reflexion verwenden.
Tags und Links .net c# nhibernate fluent-nhibernate