Silverlight RIA: свойства расширения на стороне сервера в модели не игнорируются RIA - PullRequest
1 голос
/ 04 ноября 2010

В моем приложении SilverLight у меня есть простая сущностная модель, содержащая одну таблицу: [Memo]. Определение таблицы заметок / макет класса:

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

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

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

для достижения этого мы расширим класс [Memo] SERVER-SIDE следующим образом:

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

Partial Class Memo
  UserName  [string]
End Class

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

В CLIENT-SIDE у нас есть кэшированный список пользователей, поэтому в CLIENT-SIDE мы заполним свойство UserName после загрузки EntitySet на клиент. Вот где возникает моя проблема: после установки свойства объект Entity отслеживается как измененный механизмом DomainService (DomainContext.HasChanges = true).

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

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

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

Любые идеи будут с благодарностью.

Ремко ван Дизен

1 Ответ

1 голос
/ 04 ноября 2010

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

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

...