2010-01-28 3 views
0

RIA에서 작동하는 프레젠테이션 모델 (herehere)을 얻으려고합니다. 내가 찾을 수있는 모든 예는 1 - 다수 또는 다수 - 많은 관계가없는 단순한 평면 데이터 엔티티입니다. 특히 업데이트 및 연관 관계에 삽입 할 수는 없습니다.1-many 또는 many-many 관계가있는 RIA 서비스 프레젠테이션 모델

쿼리 잘 작동 할 수 있습니다. 연관 속성 (및 필요한 경우 포함 특성)으로 표시된 프레젠테이션 클래스가 있으며, 데이터가 클라이언트 측에로드되고 엔티티로 유지되는 방법에 대해 잘 이해하고 있습니다. . 또한 새로운 엔티티에 대한 설명도 들어 있습니다. 그러나 다음과 같은 문제가 발생합니다. 다음 예에서는 단순한 앨범 및 아티스트 엔티티가 있다고 가정합니다. 앨범에는 아티스트가 하나 있고 아티스트는 앨범 수가 0 개에서 많을 수 있습니다. 둘 다 Name 속성을가집니다. 내가 myArtist.Albums.Add (anAlbum) 또는 myArtist.Albums.Remove (anAlbum)를 할 경우 클라이언트 측에

  • 는 아무 일도 발생하지 않습니다. HasChanges는 false를 반환합니다. (myArtist 및 anAlbum은 엔티티를로드하고 특정 엔티티에 대한 참조를 얻기 위해 반복적으로 코드에서 얻은 것입니다. UI 또는 DomainDataSources에서 아직 아무것도하지 않고 주위를 둘러 보지 않고 있습니다.
  • 아티스트 및 SubmitChanges의 이름을 업데이트하는 경우 서버에서 Update 메서드가 호출되면 Albums 컬렉션이 null입니다.

누구나 제안 사항이 있습니까? 아니면 더 복잡한 개체를 사용하는 예를 들어 주시겠습니까?

EDIT (후자는 위와 동일 함) : 좋습니다. 두 번째 문제 (서버에서 Update가 호출되면 엔티티 또는 엔티티 컬렉션에 대한 참조가 null로 표시됨)는 존재합니다. 변경됨으로 표시되지 않으므로 일련 화되지 않고 다시 전송됩니다. 나는 당신이 [Composition]을 사용함으로써 그것을 강제로 할 수 있다는 것을 알고 있으며, 나는 그것을 그런 식으로 작동 시켰습니다, 그러나 이것은 compositional 관계가 아니며 두 엔티티 모두 "최상위"엔티티가되기를 원합니다. 엔티티를 변경된 것으로 표시하려면 어떻게합니까?

답변

1

문제는 내 [연관] 속성이 올바르게 정의되지 않았기 때문입니다. 협회의 이름 속성이 협회의 양측에서 동일해야한다는 것을 알지 못했습니다. 이름이 동일하고 빌드를 수행 할 때 클라이언트에서 생성 된 코드는 연관이 올바르게 설정되지 않은 경우보다 "하위"를 참조하는 데 "부모"가 사용하는 EntityCollection에 대해 다른 생성자를 사용합니다 . 새로운 생성자는 컬렉션에서 추가 및 제거를 호출 할 때 약간의 추가 처리를 수행하는 콜백을 취합니다. 특히 추가 또는 제거중인 하위 엔터티를 가져 와서 부모를 참조하는 속성을 수정하면 모든 것이 유지됩니다. 동기화 : 개체를 제거한 컬렉션, 개체를 추가 한 컬렉션 및 부모에 대한 개체의 참조입니다.