Json.NET을 사용하여 역 직렬화되도록 REST 웹 서비스를 통해 Javascript에서 JSON 컬렉션을 보내고 마지막으로 NHibernate를 사용하여 DB에서 업데이트합니다 (Fluent를 사용하고 있습니다) . 내가 Json.NET 역 직렬화를 위해 사용하고 설정은 다음과 같습니다Json.NET 및 NHibernate - 영구 객체 deserializing
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();
개체가 deserialize되고 업데이트 될 때 javascript를 통해 제거 된 자식 개체가 모두 삭제되도록 보장 할 수있는 방법이 있습니까?
또한 NHibernate를 사용할 때 하위 개체를 업데이트 전에 Keys.Remove(item)
을 통해 부모 컬렉션에서 수동으로 제거해야한다고 읽었습니다. 역 직렬화 및 업데이트하는 것이 훨씬 더 바람직 할 수 있습니다 (확장형은 말할 것도 없습니다). 어떤 기회?
안녕하세요, 저에게 다시 연락해 주셔서 감사합니다. 나는 그것을 제거하는 것을 시도하고, 아직도 삭제에 대한 문제가있다. Inverse 태그가 관계의 어느 쪽이 관계 그 자체가 아닌 저축 (레코드)을 담당했는지 항상 생각했기 때문에 혼란 스럽습니다. – Stumblor
모든 것을 잡아라 - 매핑에서 Inverse()를 제거하면 DB의 외래 키를 nulling하는 효과가있었습니다. 효과적으로 관계를 종료합니다. 그래서 작동했습니다! 고아를 제거하면 승리 할 수 있습니다. 감사. – Stumblor
안녕하세요, 외래 키를 null로 설정하는 대신 레코드를 제거하는 방법을 알아 보셨습니까? – CraftyFella