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?