にクエリのために必要な回避策は、:LINQクエリは、テーブルの主キーで生成されたSilverlightのアプリ内のエンティティへのLINQを使用している間、主キー
var query = (from b in PHOTOS
where b.RECORDID == selectedRecordId
select b);
それがこのhttp://localhost/DataService.svc/PHOTOS('123456')
ようになります。これは、(驚いたことに)PK制約を実施しなかった古いDBで同じコードを使用する必要があるまでは問題ありません。結果は誤りで一つのレコードに続く返されます。http://localhost/DataService.svc/PHOTOS()?$filter=RECORDID eq '123456'
:私はこのような手でクエリを書き換えた場合
<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>
この問題は消えます。 LINQコードを書くと、カッコでPKの代わりに$フィルタを使用するように強制できますか?このテーブルのすべての結果が必要なので、最初のものを取得するだけでは機能しません。
有効な回避策については、Upvoteを参照してください。上記の編集。具体的には、これは非同期Silverlight呼び出しでは機能しません。 – jordanpg
他にもいくつかアイデアがあります。 – MCattle
追加のアイデアありがとう。私が2つのフォームが機能的に同一であることを覚えているので、Where()は問題を解決しません。明らかに、スキーマを変更すれば問題は解決しますが、それはオプションではありません。 – jordanpg