0

2 つのテーブルがあるとします:
Person(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 と仮定すると、この person には 3 つの電話があります:PhoneID: 1,2,3

次にコードで、PersonPhone から 1 つの行を削除しました: this.Person.PersonPhonees.Remove(Phone(1));

テストのために、変更を送信せずに Person データをリロードしました。個人データは DB からリロードされますが、PersonPhone にはまだ phone(2)、Phone(3) の 2 行しかありませんが、すべての電話に対して 3 行 (1、2、および 3) が必要です。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

更新は自分で管理する必要があります。WCF RIA は、Silverlight クライアントにキャッシュしたデータを置き換え (または削除) しません。

あなたの場合、あなたは電話しRemove(...)ました。WCF RIA は、データに対するその変更を尊重します。再度ロードPersonすると、WCF RIAPhone(1)は削除されたので追加されません。

RevertChanges()おそらく、コンテキスト全体にロードする前に呼び出したいと思うでしょう:

_domainContext.RejectChanges();

またはPersonエンティティのみ:

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

これにより、変更が取り消さRemove(Phone(1))れ、クエリが電話をコンテキストに再度追加できるようになります。

于 2012-06-26T18:42:11.983 に答える