2011-11-02 2 views
0

ID 속성, 버전 및 변경된 속성으로 구성된 변경 집합을 반환하는 클라이언트에서 버전 속성과 json rest-service를 사용하여 낙관적 인 동시성을 얻은 경우 어떻게 서버 측 엔터티를 업데이트 할 수 있습니까?json changeset으로 엔티티를 업데이트하려면 어떻게해야합니까?

내가 원하는 것은 json을 탈 직렬화 된 엔터티로 deserialize 한 다음 ISession.Merge 메서드를 사용하여 내 엔터티를 업데이트하는 것입니다. 그러나 분리 된 엔터티에는 많은 속성에 대한 null 값이 있으며 병합을 호출하면 내 엔터티가 모두 업데이트됩니다. 이는 원하는 것이 아닙니다. 병합이 null 인 속성을 무시하고 내 문제를 해결할 지속 된 엔터티의 해당 null이 아닌 값을 유지하도록 지시하는 방법이있는 경우

병합을위한 동작을 구성 할 방법이 없다면 나는 물론 지속 된 엔티티를 가져 와서 리플렉션을 사용하여 내 자신의 병합 메소드를 구현할 수 있습니다. 이 접근 방식의 문제점은 내가 먼저 엔티티에 대한 db 쿼리를 수행 한 다음 업데이트하는 것이 필요하지만 병합 메서드는 오인하지 않는 한이 작업을 하나의 작업으로 수행해야한다는 것입니다.

전체 엔터티 대신 변경 집합 만 전달하려는 이유를 묻는 것일 수 있습니다. 최소한의 데이터 만 전송할 수 있고 사용자가 변경하려고하는 내용을 명시 적으로 나타 내기 때문에 사용자 권한을 테스트하는 데 사용할 수 있습니다.

nhibernate 범위 내에서이 작업을 수행 할 수 없다면 어떻게 진행합니까?

+0

나는 반사 경로를 걸릴 것이다. 왕복 여행은 한 번 더 필요하지만 많은 번거 로움을 덜어줍니다. 난 당신이 사용자 지정 인터셉터와 병합을 조정할 수 있다고 생각하지만 그것은 가치가 있다고 생각하지 않는 한 othrwise 입증 – Firo

답변

0

내 신청서에 WCF Web API을 사용했습니다. Json.NET을 포장하는 맞춤형 미디어 포맷터를 사용하고 있습니다. 이것은 제네릭과 파생 된 타입으로 deserialize 할 수있게 해줍니다. 이것은 꽤 훌륭하고 매우 유용합니다.

나는 몇 가지 속성을 가진 ChangeSet 개체가 있는데, 그 중 가장 중요한 것이 이름 - 값 사전입니다. 이 설정을 사용하면 ChangeSet 개체를 사용하여 서비스 작업을 정의 할 수 있습니다. 그러나 나는 명시 적으로 XmlMediaFormatter을 제거해야했습니다. 그것은 복잡한 객체를 역 직렬화 할 수 없으므로 오류를 던지고있었습니다.

이러한 속성을 변경하는 사용자 권한을 확인한 후 리포지토리에서 개체를 가져 와서 리플렉션을 사용하여 변경 집합의 속성을 업데이트하고 리포지토리에 다시 저장합니다.

내가 솔직하게 말하면 아름답게 작동합니다. :)

관련 문제