0

いくつかのデータをプルしようとすると、クライアント側で「未定義のメソッド 'map' を呼び出すことができません」というエラーが発生します。このアクションと動作するアクションの違いは、このアクションがストアド プロシージャを呼び出して、ObjectResult<T>代わりに戻ることですDbSet<T>

これがエラーになる理由でしょうか?Chrome 開発者ツールを使用すると、ブリーズ コントローラーが json データを返していることがわかります。

ストアド プロシージャから返された行をマッピングするために、edmx で複雑なモデル タイプを作成しました。

ブリーズ コントローラーのアクションの戻り値の型はIEnumerable<T>です。

4

3 に答える 3

0

私はまったく同じ問題を抱えていましたが、神に感謝して解決策を見つけました。DbSet<T>ストアド プロシージャを使用する代わりに、ビューを使用する必要があります。Breeze は、テーブルと同様にビューを として認識します。Customers と Orders の 2 つのテーブルを含む SQL サーバー テーブルがあるとします。

Customers (**CustomerId**, FirstName, LastName)
Orders (OrderId, #CustomerId, OrderDate, OrderTotal)

ここで、CustomerId で注文を返すクエリが必要だとします。通常、これはストアド プロシージャで行いますが、前述したように、代わりにビューを使用する必要があります。したがって、クエリはビューで次のようになります。

Select o.OrderId, c.CustomerId, o.OrderDate, o.OrderTotal
from dbo.Orders o inner join dbo.Customers c on c.CustomerId = o.CustomerId

フィルタリングがないことに注意してください(どこで...)。そう:

私。フィルタリング キーを含む [一般的な] ビューを作成し、次のように名前を付けます。OrdersByCustomers

ii. VS プロジェクトのエンティティ モデルに OrdersByCustomers ビューを追加します。

iii. 次のように、エンティティを Breeze コントローラに追加します。

public IQueryable<OrdersByCustomers> OrdersByCustomerId(int id)  
{
    return _contextProvider.Context.OrdersByCustomers
                                   .Where(r => r.CustomerId == id);
}

.Where(r => r.CustomerId == id)フィルターに注目してください。データ サービス ファイルでこれを行うこともできますが、ユーザーに自分の個人データのみを表示させたいので、サーバーからフィルター処理して、ユーザーのデータのみを返す必要があります。

iv。エンティティがコントローラに設定されたので、次のようにデータ サービス ファイルでエンティティを呼び出すことができます。

var getOrdersByCustomerId = function(orderObservable, id)
{
    var query = breeze.EntityQuery.from('OrdersByCustomerId')
                                  .WithParameters({ CustomerId: id });

    return manager.executeQuery(query)
                  .then(function(data) {
                      if (orderObservable) orderObservable(data.results);
                  }
                  .fail(function(e) {
                      logError('Retrieve Data Failed');
                  }
}

v. ここから次に何をすべきかはおそらくわかっているでしょう。

それが役に立てば幸い。

于 2013-11-19T18:48:47.977 に答える
0

うーん...何が起こっているのかよくわからないので、ここで推測するだけですが、返された結果に AsQueryable() を追加し、結果の型を IQueryable に変更してみてください。

ブリーズ用のストアド プロシージャ テストはまだありませんが、これは私がいくつか追加する原動力です :)

于 2013-03-29T00:15:40.717 に答える