2012-06-25 2 views
0

Предположим, у меня есть 2 таблицы:
Person (PersonID, ...)
PersonPhone (PPID, persond, phoneid, ...)Как перезагрузить данные композитных объектов с помощью службы wcf ria?

в мета-данных определяют PersonPhone, как составное:

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

, тогда я пытаюсь перезагрузить данные Person для обновления функций. То, что я сделал это, чтобы отделить Person до вызова ФОС Риа службы для загрузки Person данных снова в модели представления:

Context.Persons.Detach(this.Person); 

она отлично работает для всех загруженных данных из таблицы Person. Затем я проверить его на PersonPhone: Пусть PersonID = 1, есть 3 телефона для данного лица: PhoneID: 1,2,3

затем в коде, я удалил одну строку из PersonPhone: this.Person.PersonPhonees. Удалить (Phone (1));

для тестирования, я не представил изменения, а затем перезагружаю данные Person. Данные персонажа перезагружаются из БД, но у PersonPhone все еще есть только 2 строки: телефон (2), телефон (3), но он должен иметь 3 строки для всех телефонов: 1,2 и 3.

Как решить эту проблему?

ответ

0

Вам нужно будет управлять обновлением самостоятельно. WCF RIA не заменяет (или удаляет) данные, которые вы кэшировали в клиенте Silverlight.

В вашем случае вы позвонили Remove(...). WCF RIA уважает эту модификацию данных. Когда вы снова загрузите Person, WCF RIA не должен добавлять Phone(1), как вы его удалили.

Может быть, вы хотите вызвать RevertChanges() перед нагрузкой на весь контекст:

_domainContext.RejectChanges(); 

Или только Person сущностей:

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

Это отменит Remove(Phone(1)) изменения и разрешить запрос повторно - подключился телефон к контексту.