Я пытаюсь заставить модель презентации (обсуждаемую здесь и здесь ) работать в RIA. Все примеры, которые я могу найти, являются простыми, плоскими объектами данных без отношений 1-многие или многие-многие, с которыми я не могу работать, в частности, над обновлениями и вставками в ассоциативные отношения.
Запросы. Я могу нормально работать - у меня есть свои классы презентаций, помеченные с помощью атрибутов Association (и, в случае необходимости, атрибутов Include), и я хорошо понимаю, как данные загружаются на клиентскую сторону и поддерживаются там как сущности. У меня также есть вставки новых лиц покрыты. Тем не менее, я испытываю следующие проблемы. В следующих примерах предположим, что у нас есть простые сущности Album и Artist, где в Album есть один исполнитель, а Artist может иметь от нуля до нескольких альбомов. Оба имеют свойство Name.
- На стороне клиента, если я сделаю myArtist.Albums.Add (anAlbum) или myArtist.Albums.Remove (anAlbum), ничего не произойдет. HasChanges возвращает false. (Обратите внимание, что myArtist и anAlbum были получены исключительно в коде путем загрузки сущностей и итерации для получения ссылок на конкретные сущности: я пока ничего не делаю в пользовательском интерфейсе или с DomainDataSources, просто бездельничая).
- Если я обновлю Имя на Artist и SubmitChanges, когда метод Update будет вызван на сервере, коллекция Albums будет нулевой.
У кого-нибудь есть какие-либо предложения, или вы можете указать мне пример, в котором используются более сложные объекты?
РЕДАКТИРОВАТЬ (сохраняя вышесказанное для потомков): Хорошо, похоже, что вторая проблема (ссылка на сущность или набор сущностей, отображаемых как нулевые, когда Update вызывается на сервере) существует, потому что дочерние объекты не помечены как измененные, поэтому они не сериализуются и не отправляются обратно. Я знаю, что вы можете заставить это произойти, используя [Композиция], и я заставил его работать таким образом, но это не композиционные отношения, и я хочу, чтобы обе сущности были сущностями «верхнего уровня». Как я могу пометить объект как измененный?