Службы данных WCF и прогнозы. Как получить URI сущности из экземпляра проекции сущности?
Я использую DataServiceContext для загрузки проекций некоторых сущностей (сущности имеют много свойств, чтобы минимизировать трафик, я загружаю только те свойства, которые нужны в данный момент), например так:
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), но он всегда возвращает ноль (вероятно, из-за проекций без отслеживания, однако я загрузил свойство PK (Id), поэтому оно не должно быть дело).
Вопрос в том, как определить URI базового объекта данных, имеющего объект проекции с PK?
1 ответ
В C# анонимные типы генерируются с ненастраиваемыми свойствами (свойства не имеют установщиков). В результате клиент служб данных WCF не может отследить их (поскольку это не имеет никакого смысла, он не может перезаписать значение свойства во время материализации). Таким образом, результат не отслеживается. Чтобы обойти это, просто объявите неанонимный класс с нужными вам свойствами и спроецируйте в него (убедитесь, что свойства настраиваемые). Обратите внимание, что анонимные типы VB имеют настраиваемые свойства, поэтому они будут отслеживаться.