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