带有RIA服务的DomainContext在SubmitChanges之后丢失列表条目

时间:2012-11-20 21:00:12

标签: wcf silverlight ria

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

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

当我在调用Submit更改之前检查count属性时,它是正确的计数。让我们说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; }
}

1 个答案:

答案 0 :(得分:0)

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

包含的一个问题是,无论何时查询Ria实体,都会返回列表中的相关项(所有这些项)。但是,如果未使用Include,则需要首先通过单独的Load调用在域上下文中加载这些相关项。

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

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

示例:

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