2 Stimmen

Json.NET und NHibernate - Deserialisierung eines persistenten Objekts

Ich sende eine JSON-Sammlung von Javascript durch einen REST-Webdienst zu deserialisieren mit Json.NET und dann schließlich in der DB mit NHibernate aktualisiert werden (ich bin mit Fluent). Die Einstellungen, die ich für Json.NET Deserialisierung verwenden sind:

        JsonConvert.DeserializeObject<T>(jsonString,
        new JsonSerializerSettings { 
            PreserveReferencesHandling = PreserveReferencesHandling.Objects
        });

Mein Json-Objekt ist:

{
  "ID": 1,
  "Name": "ObjectName",
  "Keys": [
    {
      "ID": 6,
      "Name": "ID"
    }
  ]
}

Das Ändern von Eigenschaften des Objekts und sogar das Hinzufügen und Ändern von untergeordneten Objekten (Keys) und das anschließende Deserialisieren funktionieren hervorragend. Ich kann jedoch nicht herausfinden, wie ich das Löschen von untergeordneten Objekten verwalten kann. Wenn ich zum Beispiel ein untergeordnetes Objekt entferne (mit Object.Keys.splice ) und dann aktualisieren, bleibt der DB-Datensatz, auf den er sich bezieht, bestehen, auch wenn das übergeordnete Objekt, das aktualisiert wird, sie nicht enthält.

Außerdem habe ich in der Zuordnungsdatei "AllDeleteOrphan" festgelegt.

    // one-to-many
    HasMany(x => x.Keys)
      .Inverse()
      .Cascade.AllDeleteOrphan();

Gibt es eine Möglichkeit, um sicherzustellen, dass untergeordnete Objekte über Javascript entfernt werden Kaskade gelöscht, wenn das Objekt deserialisiert und aktualisiert wird?

Ich habe auch gelesen, dass bei Verwendung von NHibernate untergeordnete Objekte manuell aus der übergeordneten Sammlung entfernt werden müssen, und zwar über Keys.Remove(item) , vor der Aktualisierung. Es wäre viel besser (um nicht zu erwähnen, skalierbar), nur deserialisieren und aktualisieren. Jede Chance?

2voto

ddango Punkte 916

Sie sollten in der Lage sein, zu aktualisieren und dann zu sehen, diese Änderungen kaskadieren, aber ich glaube, das Problem hat mit der Sammlung als inverse markiert zu tun.

Inverse=true (das ist die fließende Bindung von .Inverse() von nhibernate) ist wie die Aussage "Ich verwalte diese Beziehung nicht". Aufgrund dieser Bindung löscht/aktualisiert das übergeordnete Objekt die Sammlung nicht, weil die Kinder die Beziehung verwalten.

Ob dies sinnvoll ist oder nicht, kann ich ohne ein genaueres Verständnis Ihres Bereichs nicht wirklich sagen.

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