Silverlight アプリで LINQ to Entities を使用しているときに、テーブルの主キーでクエリが生成されると、次のようになります。
var query = (from b in PHOTOS
where b.RECORDID == selectedRecordId
select b);
このように見えますhttp://localhost/DataService.svc/PHOTOS('123456')
。これは、(驚くべきことに) PK 制約を適用していない古い DB で同じコードを使用する必要があるまでは問題ありません。結果として、1 つのレコードが返され、その後にエラーが続きます。
<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'
。括弧内の PK の代わりに $filter を強制的に使用するように LINQ コードを作成するにはどうすればよいですか? このテーブルのすべての結果が必要なので、最初の結果を取得するだけでは機能しません。