假设我有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。
如何解决此问题?
答案 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))
更改,并允许查询将手机重新添加到上下文中。