0

假设我有 2 个表:
Person(personid, ...)
PersonPhone(ppid, persond, phoneid, ...)

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

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

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

Context.Persons.Detach(this.Person);

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

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

为了测试,我没有提交更改,然后我重新加载了 Person 数据。Person 数据从 DB 重新加载,但 PersonPhone 仍然只有 2 行:phone(2)、Phone(3),但所有电话应该有 3 行:1,2 和 3。

如何解决这个问题?

4

1 回答 1

0

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

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

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

_domainContext.RejectChanges();

或者只是Person实体:

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

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

于 2012-06-26T18:42:11.983 回答