私は 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}"
);
}
不足している構成設定はありますか?