2010-08-30 8 views
0

Я использую DataServiceContext загрузить некоторые проекции сущностей (субъекты обладают многими свойствами, чтобы минимизировать трафик загружают только те свойства, которые необходимы в данный момент), как это:Услуги и прогнозы данных WCF. Как получить URI объекта из экземпляра проекции сущности?

from x in ctx.Portfolios 
     select new 
     { 
     Id = x.Id, 
     Name = x.Name, 
     PortfolioName = x.PortfolioName, 
     Description = x.Description, 
     ValidFrom = x.ValidFrom, 
     ValidUntil = x.ValidUntil 
     }; 

Что мне нужно, это действует URI объекта, чтобы загрузить его для просмотра подробностей.

Я попытался использовать ctx.TryGetUri (obj, out uri), но он всегда возвращает null (вероятно, из-за не отслеживающих прогнозов, однако, я загрузил свойство PK (Id), поэтому он не должно быть случая).

Вопрос в том, как определить URI базового объекта данных, имеющего проекционный объект с PK?

ответ

1

В C# анонимные типы генерируются с неизменяемыми свойствами (свойства не имеют сеттеров). В результате клиент WCF Data Services не может их отслеживать (поскольку это не имеет никакого смысла, оно не может перезаписать значение свойства во время материализации). Поэтому результат не отслеживается. Чтобы обойти это, просто объявите не анонимный класс со свойствами, которые вам нужны, и выполните проект (убедитесь, что свойства настраиваются). Обратите внимание, что анонимные типы VB имеют настраиваемые свойства, поэтому они будут отслеживаться.

+0

Мне не нужно устанавливать загруженные свойства. Мне просто нужно получить правильный URI объекта для загрузки его полной версии (не проекции) в другой контекст данных для редактирования. –

+0

Если вас интересует только URI, тогда ничего не проектировать, просто выберите весь объект и затем используйте DataServiceContext.GetEntityDescriptor(), чтобы получить дескриптор объекта, в котором вы можете найти свойства SelfLink и EditLink, которые хранят URI, указывающий на этот объект (первый для чтения, второй для редактирования). –

+0

Мне нужны проекции для загрузки облегченного списка бизнес-объектов для отображения в пользовательском интерфейсе. Когда пользователь дважды нажимает выбранную проекцию, мне нужно загрузить полный (200 столбцов) объект. –