2010-11-04 3 views
1

В моем приложении SilverLight у меня есть простая сущность-модель, содержащая одну таблицу: [Memo]. Памятки таблица макет определения/класс:Silverlight RIA: свойства расширения на стороне сервера на модели не игнорируются RIA

псевдо-код режим

Partial Class Memo 
    ID  [int autonumbering] 
    Memo [string] 
    UserID [int] 
End Class 

Для моего клиента, я должен видеть нормальное имя, а не [Идентификатор_пользователь] номер в пользовательском интерфейсе так нам нужно перевести это число в поле/свойство [UserID] на читаемое [UserName].

для достижения этой цели мы будем расширять [Memo] Class Серверный с этим:

псевдо-код режима

Partial Class Memo 
    UserName [string] 
End Class 

Итак, теперь мы один полный класс, содержащий как UserID и UserName (очень полезно для использования при привязке к datagrid)

У КЛИЕНТСКОЙ СТОРОНЫ у нас есть кешированный список пользователей, поэтому в CLIENT-SIDE мы заполним свойство UserName после EntitySet был у загружаемых клиенту. Здесь возникает моя проблема: после установки свойства объект Entity отслеживается как измененный механизмом DomainService (DomainContext.HasChanges = true).

Так при загрузке DataGrid 100 записей, все записи помечены изменены из-за установки свойства UserName в клиенте, и после редактирования 1 записи, все 100 записей размещены на сервер, как быть «изменены» а не только 1 запись.

Поскольку это свойство является свойством расширения, и я не хочу отслеживать изменения для UserName, я подумал: добавьте атрибут [Ignore], но не кубик. DomainService отслеживает изменения UserName. Я также попробовал атрибут [IgnoreDataMember], а не Dice. Атрибут [Исключить] не работает, так как он больше не проецируется на клиентскую сторону.

Поэтому я должен уметь восстановить состояние отслеживания объектов DomainService после загрузки и расширения данных из базы данных. Другим решением является расширение данных на стороне сервера, но пока это не вариант.

Любые идеи были бы весьма признательны.

Ремко ван Diesen

ответ

1

Если новое свойство требуется только на стороне клиента, а затем добавить расширение частичного класса на стороне клиента. Не на стороне сервера.

Мы часто добавляем новые вспомогательные свойства (например, полное имя, которое возвращает LastName + FirstName) в наш проект служб RIA на стороне клиента.

+0

Действительно, отличное предложение, теперь у нас есть расширения как на стороне сервера, так и на стороне клиента. Расширения клиентской стороны не отслеживаются контекстом базы данных. – Remco