2012-11-20 3 views
0

SubmitChanges를 호출하여 내 RIA 엔터티 중 하나에 변경 사항을 제출합니다. 이 엔티티에는 ObservableCollection이라는 Items 속성이 있습니다.SubmitChanges 이후에 RIA 서비스가 없어진 목록 항목이있는 DomainContext

유일한 변경 사항은이 목록에 항목을 추가 한 것입니다.

제출 변경을 호출하기 전에 count 속성을 확인하면 정확한 개수입니다. 예를 들어, 다음과 같습니다. SubmitChanges를 호출 한 후 클라이언트 측의 수는 1입니다. 목록에는 새로 추가 된 항목 만 포함되며 기존 항목은 포함되지 않습니다.

서버에서이 작업은 6 개의 모든 항목이 있음을 나타내며 피들러를 사용하여 6 개의 항목이 모두 내 클라이언트로 반환되는지 확인합니다.

그러나 응용 프로그램에서 실행되는 다음 코드 줄에서이 목록의 개수는 1 (또는 새로 추가 된 항목의 수)입니다.

나는 모든 항목이 제대로 있고, 새 DomainContext를 만들고 목록에있는 항목을 모두 다시로드했는지 확인했습니다. 추가 한 항목도 있습니다.

이 문제의 원인에 대한 의견이 있으십니까? 이 물건들은 어딘가에서 잃어 가고 있습니다.

ObservableCollection과 함께 해당 항목을 잃어 버리는 개체가 여기에 있습니다.

[DataContract(Name = "CT", Namespace = "http://domain/properties")] 
public class ChoicePropertyType : PropertyType 
{ 
    [DataMember(Name = "C")] 
    public bool IsCustomValueAllowed { get; set; } 

    [DataMember(Name = "A")] 
    public bool AllowMultiple { get; set; }   

    private ObservableCollection<ValidValue> _defaultValues; 

      [Association("DefaultValues", "Id", "ParentId")] 
    [Include] 
    [Composition] 
    [DataMember(Name = "D")] 
    public ObservableCollection<ValidValue> DefaultValues 
    { 
     get 
     { 
      if (_defaultValues == null) 
       _defaultValues = new ObservableCollection<ValidValue>(); 
      return _defaultValues; 
     } 
    } 

} 

[KnownType(typeof(ChoicePropertyType))] 
[KnownType(typeof(DatePropertyType))] 
[KnownType(typeof(NumberPropertyType))] 
[KnownType(typeof(TextPropertyType))] 
[KnownType(typeof(UserPropertyType))] 
[DataContract(Name = "PT", Namespace = "http://domain/properties")] 
public class PropertyType 
{ 
    [Key] 
    [DataMember(Name = "I")] 
    public string Id { get; set; } 

    [DataMember(Name = "P")] 
    public int? ParentId { get; set; } 

    [DataMember(Name = "R")] 
    public bool IsRequired { get; set; } 

    [DataMember(Name = "H")] 
    public bool HasDefaultValue { get; set; } 
} 
+0

코드 중 일부를 공유 할 수 있는지 궁금합니다. – bleepzter

+0

자, 문제의 객체에 대한 코드 샘플을 제공했습니다. – user1060500

답변

0

RIA 엔터티의 메타 데이터에는 목록 속성을 장식하는 [포함] 속성이 있어야한다고 생각합니다. 게다가, 그 List가 다른 엔티티를 나타내는 경우, 실제로는 EntityCollection이 아니면 안됩니다.

포함 사항의 한 가지 문제점은 Ria Entity를 쿼리 할 때 목록의 관련 항목 (모두)도 반환된다는 것입니다. 그러나 Include가 사용되지 않으면 별도의 Load 호출을 통해 먼저 도메인 컨텍스트에서 관련 항목을로드해야합니다.

즉, 도메인 컨텍스트의 목록에있는 모든 관련 항목을로드하는 쿼리를 실행해야하므로 ria 엔티티는 목록의 항목과 적절한 관계를 유지합니다.

또한 ria 엔티티 목록에 항목을 추가하는 것은 실제로이 작업을 수행하는 올바른 방법이 아닙니다. 우선 이미 존재하지 않는다면 컨텍스트에 ria 엔티티를 추가합니다. 그런 다음 관련 엔터티를 컨텍스트에 추가합니다. 마지막으로 관련 엔티티의 리마 엔티티 링크를 통해이 둘을 묶어 변경 사항을 저장합니다.

예 :

추가 또는 도메인 컨텍스트 리아스식 개체를 검색 할 수 있습니다. 관련 엔티티 생성 관련 entity.ria 엔티티 참조 링크 = ria 엔티티; 관련 엔터티를 컨텍스트에 추가하십시오. 변경 사항을 저장하십시오.

+0

이것이 적용되는지 확실하지 않습니다. 사실 List는 참으로 ObservableCollection입니다. 코드에서 변경할 필요가있는 내용을 볼 수 있습니까? – user1060500

+0

ChoicePropertyType이 엔티티에서 상속 되나요? 리아 엔티티? – bleepzter

+0

클래스를 꾸미는 DataContract 특성을 가진 일반 클래스 인 PropertyType을 상속합니다. RIA Entiy의 특별한 점은 무엇입니까? – user1060500