0

Readmeファイルの指示に従って新しいプロジェクトを実行しようとすると、次のエラーが発生します。

1:Todosのクエリ

2:クエリが失敗しました:リターンタイプが「System.Collections.Generic.List`1[[MyTasks.Api.Models.BreezeSampleTodoItem、MyTasks.Api、Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken =null]]'はクエリをサポートできません。返されるコンテンツのタイプがIEnumerable、IQueryable、またはいずれかのインターフェイスの汎用形式であることを確認してください。

アップデート:

イベントビューアを確認したところ、マシンでデバッグしようとしたときに、これまでに見たことのないSQLエラーが表示されました。

ユーザー'my-machine\user-name'のログインに失敗しました。理由:明示的に指定されたデータベースを開くことができませんでした。[クライアント: ]

BreezeSamplesContextによって生成されているデータベースに何らかの理由でアクセスできないようです。コードファーストで生成されていますが、クエリできません(どうやら)。

更新2:

デフォルトの方法を-に変更しました

[HttpGet]
public IQueryable<BreezeSampleTodoItem> Todos()
{
    System.Data.Entity.DbSet<BreezeSampleTodoItem> result = null;
    try
    {
        result = _contextProvider.Context.Todos;
    }
    catch (Exception exc)
    {
        throw new Exception(exc.Message);
    }
    return result;
}

Seedメソッドは機能し、データベースは削除されてシード値が再入力されますが、上記の「結果」で0項目の応答が返されます。

4

2 に答える 2

5

更新:12月15日

重要な情報...問題の理由...プレリリースSPAテンプレートの使用です。

そのテンプレートは、Breezeのドキュメントで説明されているMVC 4WebAPIまたは空のテンプレートと同じありません。

SPAテンプレートとMVCの更新には、ODataクエリに対するASP.NETWebAPIサポートの始まりが含まれています。ODataでの彼らの刺し傷はBreezeと衝突します。2つの力は、ODataクエリの所有権をめぐって争っています。それらを使用できればいいのですが、$selectや$expandのサポートなどの重要な機能が欠けています。

幸い、MSバージョンを無効にして、Breezeが普及するようにするのは簡単です。App_Start / WebApiConfig.csファイルを開き、以下を削除またはコメントアウトします。

config.EnableQuerySupport(); //BreezeのODataActionFilterと競合します

「返品タイプ」に関する誤解を招くエラーは消え、ビジネスに戻るはずです。

この手順を実行すると、サイト全体のMS WebAPIODataフィルターがオフになることに注意してください。BreezeコントローラーのみのODataActionFilterAttributeMSWebAPI OData処理を無効にするように、Breezeを更新することがバックログにあります。現時点ではSPAテンプレートは非公式のままなので、まだ気にしませんでした。ノンスの場合...コントローラーごとのフィルターのクリーンアップを自分で行う準備ができていない限り、同じサイトでBreezeクエリとWebAPIODataクエリを混在させることはできません。

新しいSPAテンプレートのBreezeバージョンが機能しており、リリースの準備がほぼ整っています。私はそれについてすぐに書き、この答えをリンクで更新します。

以下は、(a)問題の診断方法を説明し、(b)コメントチェーンのコンテキストであるため、私が主に保持している以前の回答です。


最初からやり直して、診断できるかどうか見てみましょう。すべてのVisualStudioセッションを閉じます(IIS Expressを停止する必要があります)。新しいVSセッションを起動します。VS2012でMVC4WebApiアプリケーションを作成します。Breeze.MVC4WebApiClientSampleNuGetパッケージを追加します。それを実行します(F5)。まだ問題がありますか?

もしそうなら、次のような新しい行でコントローラーメソッドを更新しましょう:

[HttpGet]
public IQueryable Todos(){
    var items = _contextProvider.Context.Todos.ToList(); //クエリをテストします
    return _contextProvider.Context.Todos;
}

行にブレークポイントを設定しvar items ...、デバッガーで再実行します(F5)。その行に足を踏み入れます。投げましたか(良くありませんが面白いです)?そうでない場合、あなたはいくつのアイテムを手に入れましたか?零?あなたは6を持っている必要があります。

この点を乗り越えられないのなら、これはそよ風の問題ではないと思います。Breezeはまだ何もしていません。私はあなたの環境で予期しない何かを探しているでしょう。

この時点で、それがどのようになっているのかを教えてください。それでもスタックしている場合は、次のステップの準備ができています。

于 2012-12-14T09:06:01.573 に答える
0

NuGetのサンプルは、コードを実行するたびにデータベースを削除して再作成するように設定されています。SQL Management Studioでデータベースを開いていますか?私もこれに出くわしました。

BreezeSampleDatabaseInitializerクラスを見てください。サーバーセッション間の変更を保持することについて説明しているコメントを確認してください。DropCreateDatabaseIfModelChangesインターフェースを実装するようにクラスを変更した場合、モデルを変更したときにのみデータベースを削除しようとします。

于 2012-12-13T23:55:13.217 に答える