0

私は SPA で Breeze を使用して大成功を収めていますが、expand() を使用して単一のクエリで親から子へのデータを返そうとするとスタックするようです。

単一のテーブル クエリを実行する場合、JSON の戻り値の $type は正しいです。

$type: MySPA.Models.Challenge, MySPA エキスパンドなし

ただし、クエリで expand() を使用すると、リレーショナル データが取得されますが、$type は次のようになります。

System.Collections.Generic.Dictionary 2[[System.String, mscorlib],[System.Object, mscorlib]]

展開あり

$type は適切なテーブル + 名前空間ではないため、クライアント側のコードはこれがエンティティであることを認識できず、Breeze オブジェクトではなく JSON として公開します (observables、entityAspect などを使用)。

最初は、Before/After 保存メソッドをオーバーライドできるように、独自の ContextProvider を使用していました。これらの問題が発生したとき、ストック EFContextProvider<> に戻しました。

データベースファーストモードでEF5を使用しています。

これが私のコントローラーコードです:

[BreezeController]
public class DataController : ApiController
{
    // readonly ModelProvider _contextProvider = new ModelProvider();
    readonly EFContextProvider<TestEntities> _contextProvider = new EFContextProvider<TestEntities>();

    [HttpGet]
    public string Metadata()
    {
        return _contextProvider.Metadata();
    }

    [Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
    [HttpGet]
    public IQueryable<Challenge> Challenges()
    {
        return _contextProvider.Context.Challenges; 
    }

    [HttpPost]
    public SaveResult SaveChanges(JObject saveBundle)
    {
        return _contextProvider.SaveChanges(saveBundle);
    }       
    public IQueryable<ChallengeNote> ChallengeNotes()
    {       
        return _contextProvider.Context.ChallengeNotes;
    }
}

ここに私の BreezeWebApiConfig.cs があります

 public static void RegisterBreezePreStart()
  {
      GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);

      GlobalConfiguration.Configuration.Routes.MapHttpRoute(
          name: "BreezeApi",
          routeTemplate: "breeze/{controller}/{action}"
      );
  }

不足している構成設定はありますか?

4

2 に答える 2

0

この問題は、[Queryable]属性の使用が原因であると強く疑われます。

[BreezeQueryable]代わりに属性を使用する必要があります。

クエリの制限に関するドキュメントを参照してください。

Web API v.1.5QueryableAttributeを優先して、Web API が非推奨になったことを認識しています。に対応する派生アトリビュートを記述する機会が得られるまで、そのままにしておいてEnableQueryAttributeください。この開発のステータスについては、ドキュメントを参照してください。BreezeQueryableEnableQuery

于 2014-10-07T19:54:51.713 に答える