2

内のIDで単一のエンティティを取得しようとしていますDomainService

ただし、そのエンティティのタイプはクライアントで生成されません。これが私の質問です:

public Contact GetContact(int contactId)
{
  return DbContext.Contacts
    .Include(c => c.Phones)
    .Include(c => c.Addresses)
    .SingleOrDefault(c => c.ContactId == contactId);
}

エンティティはPhoneクライアントで生成されません。

このメソッドをで装飾しようとしまし[Query]たが、次のコンパイル時の例外が発生します。

クエリ操作「GetContact」は、その戻りタイプ「Models.Contact」がTのIEnumerableを実装していないため、構成可能としてマークできません。

IDで単一のエンティティを返すWCFRIAクエリを作成する方法はありますか?

4

3 に答える 3

3

プロパティを設定IsComposableすると、ビルドできるようになります。Phoneしかし、私たちの議論のように、なぜあなたとAddressエンティティが生成されないのかわかりません。

[Query(IsComposable=false)]
public Contact GetContact(int contactId)
{
  return DbContext.Contacts
    .Include(c => c.Phones)
    .Include(c => c.Addresses)
    .SingleOrDefault(c => c.ContactId == contactId);
}
于 2012-06-14T14:46:53.427 に答える
1

RIAサービスメソッドが機能するには、IQueryable<T>またはIEnumerable<T>が必要です。単一の要素ではなく、変更セットで機能します。

これに変更します(そして、単一のオブジェクトを返そうとするのをやめます):

public IQueryable<Contact> GetContact(int contactId)
{
  return DbContext.Contacts
    .Include(c => c.Phones)
    .Include(c => c.Addresses)
    .Where(c => c.ContactId == contactId);
}

FirstOrDefault()をクライアント側のコードに適用するだけです(もちろんデータがロードされたら)。

于 2012-06-11T10:46:56.750 に答える
0

DomainDataSourceやDataPagerなどのRIA対応のコントロールは、生成されるほぼすべてのロード操作でLINQ'Take()'を使用します(Fiddlerトレースをチェックして意味を確認してください)。私はその100%の時間を言うのに十分長い間見ていませんが、ほとんどの場合です。これらのコントロールはIQueryableを想定しており、ソート、ページ付け、グループ化などを実行しようとすると、ランダムにバーフします。.FirstOrDefault()を呼び出すことはそれほど大きな問題ではありません。

于 2012-06-18T19:47:13.730 に答える