0

エンティティ フレームワークを使用してストアド プロシージャを呼び出そうとしています。Web API メソッドに直接アクセスすると問題なく動作しますが、そよ風から呼び出すと、メタデータ メソッドで例外が発生します。エラーは次のとおりです:「... の CLR 型が見つかりませんでした」。誰でもこれを修正する方法を知っていますか?

4

1 に答える 1

1

私はまったく同じ問題を抱えていましたが、神に感謝して解決策を見つけました。Breeze はビューをDbSet<T>テーブルのように として認識するため、ストアド プロシージャを使用する代わりに、ビューを使用する必要があります。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:53:51.073 に答える