我正在调用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; }
}
答案 0 :(得分:0)
我认为RIA实体的元数据需要有[Include]属性来装饰list属性。此外,如果该List表示其他实体,则它应该是EntityCollection。
包含的一个问题是,无论何时查询Ria实体,都会返回列表中的相关项(所有这些项)。但是,如果未使用Include,则需要首先通过单独的Load调用在域上下文中加载这些相关项。
这意味着您需要执行一个查询,该查询将加载域上下文中列表中的所有相关项,然后您的ria实体将与列表中的项具有正确的相关性。
此外,将项目添加到ria实体列表中并不是实现此目的的正确方法。首先,如果ria实体不存在,则将其添加到上下文中。然后,您将相关实体添加到上下文中。最后,您可以通过相关实体的ria实体链接将两者绑定在一起并保存更改。
示例:
将ria实体添加或检索到域上下文。 创建相关实体 相关实体.ria实体参考链接= ria实体; 将相关实体添加到上下文。 保存更改。