2

ユーザー オブジェクトのリストを返す単一の [Invoke] 操作を使用するカスタム ドメイン サービスがあります。

コンパイルするには、[Invoke] 操作の外側のプロパティ (以下で「DONOTUSE」として強調表示) またはメソッドで User オブジェクトを切り詰める必要があります。そうしないと、次のコンパイル時エラーが発生します。

「GetUsers」という名前の操作は、必要な署名に準拠していません。戻り値の型は、エンティティまたは複合型、エンティティまたは複合型のコレクション、または定義済みのシリアル化可能な型のいずれかである必要があります。

プロパティを切り詰めると、意図したとおりにコンパイルおよび実行されますが、ハックは私を悩ませます。

[クエリ] 属性を使用したくないので、使用を提案しないでください。[Query] に切り替えると正常にコンパイルされるため、これを言いますが、EntityQuery の結果セットまたはその遅延実行を処理したくないからです。

私がアーキテクチャを設計した方法、この例のユース ケースのニーズ、および MSDN ドキュメントにより、[Invoke] が最も適切な手段です。

[EnableClientAccess()]
public class UserDomainService : DomainService
{

    private IUserService userService;
    public UserDomainService(IUserService service)
    {
        userService = service;
    }

    [Invoke, RequiresAuthentication]
    public List<User> GetUsers()
    {
        return userService.GetUsers();
    }

    //HOW CAN I REMOVE THE FOLLOWING AND STILL COMPILE?
    public User DONOTUSE()
    {
        return null;
    }

}

私はこれであなたを残します... 単一の [Invoke] 操作を持つカスタム DomainServices を持つ別のプロジェクトがあり、正常コンパイルされます。私の人生では、一方が他方よりもコンパイルされる理由を理解できません。

アップデート

以下の選択した回答のコメントを参照してください。

4

1 に答える 1

2

このようなユーザーを公開しようとしましたか?

IQueryable<User> GetUsers() { throw new NotImplementedException(); }

これは、WCF Ria コード ジェネレーターにエンティティのクライアント側を公開させる方法です。共有コード Class.shared.cs も使用してみてください。WCF Ria ドキュメントで調べてください。

于 2011-04-19T08:15:08.083 に答える