В моем приложении 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 после загрузки и расширения данных из базы данных. Другое решение - расширить данные на стороне сервера, но пока это не вариант.
Любые идеи будут с благодарностью.
Ремко ван Дизен