1

私はここで異常な状況に直面しています。次のアクション メソッドを持つ WebAPI ブリーズ コントローラーがあります。

    [HttpGet]
    public IQueryable<Client> Clients(bool IsEbasys = false)
    {
        if (IsEbasys)
        {
            List<Client> lst = new List<Client>();
            lst.Add(new Client() {  FirstName = "Sam", LastName = "Smyth" });
            return lst.ToList().AsQueryable<Client>();
        }
        else
        {
            return _contextProvider.Context.Clients;
        }
    }

2 つのシナリオ:

クラスの属性を削除する[BreezeController]と、ハードコードされたリストが正常に返されます。しかしもちろん、2 番目のものは機能しなくなります (実際には、クエリ フィルターに関係なく、すべてのクライアント エンティティが返されます)。

クラスに属性を追加すると[BreezeController]、コンテキストのクエリは期待どおりに機能しますが、何らかの理由でハードコードされたリストが空の配列としてクライアントに返されますが、1 つのクライアントが含まれている必要があります。

これに対する回避策はありますか? または、同じコントローラーで 2 つを混在させることはできませんか?

4

1 に答える 1

3

BreezeQueryable 属性をメソッドに追加しようとしましたか?

[HttpGet]
[BreezeQueryable]
public IQueryable<Client> Clients(bool IsEbasys = false)
{
    if (IsEbasys)
    {
        List<Client> lst = new List<Client>();
        lst.Add(new Client() {  FirstName = "Sam", LastName = "Smyth" });
        return lst.ToList().AsQueryable<Client>();
    }
    else
    {
        return _contextProvider.Context.Clients;
    }
}

http://www.breezejs.com/documentation/web-api-controllerから

BreezeQueryableAttribute

Breeze クライアントは、OData クエリ URL としてフォーマットされたコントローラーに HTTP GET 要求を送信することにより、データのクエリを実行します。たとえば、クライアントはこの URL を使用して、作成日でソートされたアクティブな (アーカイブされていない) Todo を照会できます。

1 .../breeze/todos/Todos?$filter=IsArchived eq false&$orderby=CreatedAt Breeze [Queryable] 属性 [1] を使用すると、Breeze はコントローラーの Todos アクション メソッドによって返される IQueryable を拡張できます (上記のコード サンプルを参照)。 . 最終的な効果は、次のような LINQ クエリです。

1 2 query = _contextProvider.Context.Todos .Where(t => t.IsArchived == false).OrderBy("CreatedAt"); IQueryable を修正したので、Breeze はそれを実行して、クエリの LINQ プロバイダー (この例では Entity Framework プロバイダー) を呼び出します。

于 2013-09-13T21:32:30.040 に答える