0

我正在调用 SubmitChanges 来向我的 RIA 实体之一提交更改。该实体有一个属性,该属性具有一个 ObservableCollection 的 Items 属性。

我所做的唯一更改是在此列表中添加了一个条目。

当我在调用提交更改之前检查计数属性时,它是正确的计数。比方说 6。调用 SubmitChanges 后,客户端的计数为 1。并且列表仅包含新添加的项目,而不包含以前存在的项目。

在服务器上,操作表明所有 6 个项目都在那里,我使用 Fiddler 验证所有 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; }
}
4

1 回答 1

0

我认为 RIA 实体的元数据需要有一个 [Include] 属性来装饰列表属性。此外,如果该列表表示其他实体,它实际上应该是一个 EntityCollection。

包含的一个问题是,每当您查询 Ria 实体时,列表中的相关项目(全部)也将被返回。但是,如果不使用 Include,则需要首先通过单独的 Load 调用在域上下文中加载这些相关项。

这意味着您需要执行一个查询,该查询将在域上下文中加载列表中的所有相关项目,然后您的 ria 实体将与列表中的项目具有适当的关系。

此外,将一个项目添加到 ria 实体的列表中并不是真正的正确方法。首先,如果 ria 实体不存在,则将其添加到上下文中。然后您将相关实体添加到上下文中。最后,您将通过相关实体的 ria 实体链接将两者联系在一起并保存更改。

例子:

将 ria 实体添加或检索到域上下文。创建相关实体related entity.ria实体引用链接=ria实体;将相关实体添加到上下文中。保存更改。

于 2012-11-21T00:08:23.117 回答