背景:
Linqpad(或VS2010中)的LINQ查询
EntityTypes.Where(x => x.EntityUrn ==“http:// foo”)
转换为以下符合oData的URI:
http://localhost/OData.svc/EntityTypes(的 'http://富') (这是因为EntityUrn是实体键...如果我的Linq查询指定任何其他字段,则使用$ filter语法)
问题是由于实体密钥中的受限字符,此oData URI返回错误(请参阅blogs.msdn.com/b/peter_qian/archive/2010/05/25/using-wcf-data-service-with -restricted-characrters-AS-keys.aspx)
所以我想要做的就是让这个LINQ查询自动转换为这个等效的oData兼容URI:
http://localhost/OData.svc/EntityTypes?$ filter = EntityUrn eq'http:// foo'
我有什么建议吗?
答案 0 :(得分:1)
如上所述,即使您解决手头的问题,更大的问题仍然适用,那就是您的实体无法通过编辑/自我链接添加。这意味着您将无法在查询中使用导航(/ Customer(0)/ Orders),并且您的服务将无法接受对其实体的任何PUT / DELETE请求。 因此,如果可能的话,我会将模型更改为不使用URL作为关键属性。而是使用一些可以成为URI路径段的一部分的值。
不可能直接修改LINQ提供程序生成的URL,主要是因为URL生成过程没有公共挂钩。你显然可以从头开始编写一个,但这太过分了。