我在我的 SPA 中使用 Breeze 取得了很大的成功,但在尝试使用 expand() 在单个查询中返回父->子数据时似乎卡住了。
在进行单表查询时,JSON 返回中的 $type 是正确的:
$type: MySPA.Models.Challenge, MySPA
但是,如果我在查询中使用 expand(),我会得到关系数据,但 $type 是这样的:
System.Collections.Generic.Dictionary 2[[System.String, mscorlib],[System.Object, mscorlib]]
由于 $type 不是正确的表 + 命名空间,客户端代码无法判断这是一个实体并将其公开为 JSON 而不是 Breeze 对象(带有 observables、entityAspect 等)。
起初我使用自己的 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}"
);
}
是否有我缺少的配置设置?