Могу ли я настроить перевод провайдера .NET linq в формат oData URI? - PullRequest
0 голосов
/ 09 августа 2011

background:

Этот запрос LINQ в Linqpad (или в VS2010 в этом отношении)

EntityTypes.Where (x => x.EntityUrn == "http://foo")

переводитсяк следующему URI, совместимому с oData:

http://localhost/OData.svc/EntityTypes('http://foo') (это потому, что EntityUrn является ключом сущности ... если мой запрос Linq указывает любое другое поле, вместо него используется синтаксис $ filter)

Проблема состоит в том, что этот URI oData возвращает ошибку из-за ограниченных символов в ключе сущности (см. Blogs.msdn.com/b/peter_qian/archive/2010/05/25/using-wcf-data-service-with-limited-Characters-as-keys.aspx)

Итак, я хочу, чтобы этот запрос LINQ автоматически преобразовывался в эквивалентный URI, соответствующий oData:

http://localhost/OData.svc/EntityTypes?$filter=EntityUrn eq 'http://foo'

Есть предложения, как мне это сделать?

1 Ответ

1 голос
/ 09 августа 2011

Как уже отмечалось выше, даже если вы работаете над этой проблемой, более серьезная проблема по-прежнему применима и заключается в том, что ваши сущности не могут быть адресованы через их ссылки редактирования / самостоятельного использования.Это означает, что вы не сможете использовать навигацию в своих запросах (/ Customer (0) / Orders) и что ваша служба не сможет принимать запросы PUT / DELETE для своих объектов.Поэтому, если это вообще возможно, я бы изменил модель, чтобы не использовать URL в качестве ключевого свойства.Вместо этого используйте некоторое значение, которое может быть частью сегмента пути URI.

Невозможно напрямую изменить URL-адрес, сгенерированный поставщиком LINQ, главным образом потому, что в процессе генерации URL-адреса нет общедоступного хука.Очевидно, вы могли бы написать один с нуля, но это слишком много работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...