Silverlight 4.0 如何使用wcf ria服务重新加载复合对象数据?

Silverlight 4.0 如何使用wcf ria服务重新加载复合对象数据?,silverlight-4.0,wcf-ria-services,Silverlight 4.0,Wcf Ria Services,假设我有两张桌子: 人形。。。 PersonPhoneppid,persond,phoneid 在元数据中将PersonPhone定义为复合: [Include] [Composition] public EntityCollection<PersonPhone> PersonPhonees { get; set; } 它适用于从表Person加载的所有数据。然后我对PersonPhone进行了测试: 假设personid=1,此人有3部手机:PhoneID:1,2,3 然后在代码

假设我有两张桌子: 人形。。。 PersonPhoneppid,persond,phoneid

在元数据中将PersonPhone定义为复合:

[Include]
[Composition]
public EntityCollection<PersonPhone> PersonPhonees { get; set; }
它适用于从表Person加载的所有数据。然后我对PersonPhone进行了测试: 假设personid=1,此人有3部手机:PhoneID:1,2,3

然后在代码中,我从PersonPhone中删除了一行: this.Person.personphones.RemovePhone1

对于测试,我没有提交更改,然后重新加载Person数据。Person数据已从DB中重新加载,但PersonPhone仍然只有2行:phone2、Phone3,但所有电话都应该有3行:1、2和3


如何解决此问题?

您必须自己管理刷新。WCF RIA不会替换或删除您在Silverlight客户端中缓存的任何数据

在您的情况下,您调用了Remove。。。。WCF RIA尊重对数据的修改。再次加载Person时,WCF RIA不应添加Phone1,因为您已将其删除

也许您希望在加载整个上下文之前调用RevertChanges:

_domainContext.RejectChanges();
或者只是个人实体:

_domainContext.EntityContainer.GetEntitySet<Person>().RejectChanges();
这将撤消RemovePhone1更改,并允许查询将电话重新添加到上下文中

_domainContext.EntityContainer.GetEntitySet<Person>().RejectChanges();