0

私はスムーズに実行されているドメイン サービスを持っており、定義されたエンティティのジェネリック リストを返すいくつかの公開関数がありますが、何らかの理由でいくつかの共通情報を追加したので、返す必要がある追加情報でコレクションをラップするジェネリック オブジェクトを作成しました。

しかし、変更を加えてクライアントでサービスを使用しようとすると、関数がコンテキストに表示されず、すでに検索しており、見つかったのはジェネリック IQueryable の属性でした

私のラップクラス

public class Wrap<T>
{

   public String commonProperty { get; set; }
   public String anotherCommonProperty { get; set; }
   public List<T> items { get; set; }

}

私のサービスドメインで

public Wrap<SomeClass> GetAll()
{

  Wrap<SomeClass> myObject = new Wrap<SomeClass>();
  myObject.items = new List<SomeClass>();
  myObject.commonProperty = "some info";
  myObject.anotherCommonProperty = "some info";
  return myObject;

}
4

2 に答える 2

0

[KnownType(typeof(SomeClass))]クラスに属性を追加するWrap<T>場合、問題は、ドメイン内のすべてのクラスに 1 つの属性を含める必要があることですKnowType(これは、ポリモーフィック サービスを作成しているためです)。

そして、サービス[ServiceKnownType(typeof(SomeClass))]GetAllメソッドに を追加します (これは、ドメイン サービスに有効かどうかわからない wcf サービス用です)。

于 2013-06-19T22:00:57.140 に答える
0

WCF RIA ドメイン サービスは、汎用エンティティ タイプをサポートしていません。 IEnumerable<T>特殊なIQueryable<T>ケースです。

サポートされているメソッド タイプと一致しないため、メソッドは無視されました。変更前GetAllは Query メソッドとして認識されていました。属性を追加することで強制できます。

[Query]
public Wrap<SomeClass> GetAll()

今では静かに消えません。ただし、代わりにコンパイル時エラーが発生します。

タイプ 'Wrap`1' は有効なエンティティ タイプではありません。エンティティ タイプをジェネリックにすることはできません。

于 2013-06-22T21:23:58.450 に答える