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

时间:2012-06-25 17:01:48

标签: silverlight-4.0 wcf-ria-services

假设我有2张桌子:
人(personid,...)
PersonPhone(ppid,persond,phoneid,...)

元数据中的

将PersonPhone定义为复合:

[Include]
[Composition]
public EntityCollection<PersonPhone> PersonPhonees { get; set; }

然后我尝试重新加载Person数据以进行刷新功能。我所做的是在调用wcf ria服务之前分离Person以在视图模型中再次加载Person Data:

Context.Persons.Detach(this.Person);

它适用于从表Person加载的所有数据。然后我测试它为PersonPhone: 假设personid = 1,此人有3部电话:PhoneID:1,2,3

然后在代码中,我从PersonPhone中删除了一行: this.Person.PersonPhonees.Remove(电话(1));

进行测试,我没有提交更改,然后我重新加载Person数据。人员数据是从DB重新加载的,但PersonPhone仍然只有2行:phone(2),Phone(3),但它应该有3行所有手机:1,2和3。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

在您的情况下,您致电Remove(...)。 WCF RIA尊重对数据的修改。当您再次加载Person时,WCF RIA不应添加Phone(1),因为您已将其删除。

也许你想在加载整个上下文之前调用RevertChanges()

_domainContext.RejectChanges();

或只是Person个实体:

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

这将撤消Remove(Phone(1))更改,并允许查询将手机重新添加到上下文中。