JavascriptからREST Webサービスを介してJSONコレクションを送信して、Json.NETを使用して逆シリアル化し、最後にNHibernate(Fluentを使用しています)を使用してDBで更新します。 。私はJson.NETデシリアライズするために使用している設定は、次のとおりです。Json.NETとNHibernate - 永続オブジェクトの逆シリアル化
JsonConvert.DeserializeObject<T>(jsonString,
new JsonSerializerSettings {
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
私のJSONオブジェクトです:
{
"ID": 1,
"Name": "ObjectName",
"Keys": [
{
"ID": 6,
"Name": "ID"
}
]
}
は、オブジェクトのプロパティの変更、さらには子オブジェクト(キー)を追加し、変更し、デシリアライズは素晴らしい作品です。しかし、私は子オブジェクトの削除を管理する方法を考えることができません。たとえば、子オブジェクト(Object.Keys.splice
を使用)を削除してから更新すると、更新された親オブジェクトにそれらが含まれていなくても、関連するDBレコードは永続的なままです。
また、マッピングファイルに「AllDeleteOrphan」も設定しました。
// one-to-many
HasMany(x => x.Keys)
.Inverse()
.Cascade.AllDeleteOrphan();
オブジェクトがデシリアライズされて更新されたときに、javascriptで削除された子オブジェクトがカスケードされるようにする方法はありますか?
また、NHibernateを使用している場合、更新前に子オブジェクトを親コレクションから手動で削除する必要があります(Keys.Remove(item)
経由)。デシリアライズして更新するほうがはるかに好ましい(スケーラビリティはもちろん)。万一?
お返事ありがとうございます。私はそれを削除しようとし、まだ削除の問題があります。 Inverseタグは、関係のどちら側が関係(関係)自体ではなく、保存(レコード)の責任を負っていたと私は常に考えているので、混乱しますか? – Stumblor
すべて保持する - マッピングからInverse()を削除すると、DBの外部キーがnullになるという効果がありました。孤児たちを取り除くだけで、勝利することができます。ありがとう。 – Stumblor
こんにちは、外部キーを無効にするのではなくレコードを削除する方法を考えましたか? – CraftyFella