在 Silverlight 应用程序中使用 LINQ to Entities 时,在对表的主键生成查询时:
var query = (from b in PHOTOS
where b.RECORDID == selectedRecordId
select b);
它看起来像这样http://localhost/DataService.svc/PHOTOS('123456')
。这是可以的,直到需要将相同的代码用于(令人惊讶地)没有强制执行 PK 约束的旧数据库。结果是返回一条记录,然后出现错误:
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code></code>
<message xml:lang="en-US">An error occurred while processing this request.</message>
<innererror>
<message>A single resource was expected for the result, but multiple resources were found.</message>
<type>System.InvalidOperationException</type>
<stacktrace> at System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved)
at System.Data.Services.ResponseBodyWriter.Write(Stream stream)</stacktrace>
</innererror>
</error>
如果我像这样手动重写查询,这个问题就会消失http://localhost/DataService.svc/PHOTOS()?$filter=RECORDID eq '123456'
:如何编写 LINQ 代码以强制它使用 $filter 而不是括号中的 PK?需要此表中的所有结果,因此仅获取第一个结果是行不通的。