to-do list sample正在使用BreezeController来提供API。 EFContextProvider
用于提供Metadata
字符串和SaveChanges()
等方法。
问题:它直接与DbContext
对话。我仍然希望能够灵活地返回我自己的视图模型而不是那些域模型。
在常规ApiController
中,我们可以轻松返回自己的视图模型。但是,如果我转向常规ApiController
,则在调用api时,breeze
会要求Metadata
,这是由
[HttpGet]
public string Metadata() {
return _contextProvider.Metadata();
}
如果我们使用BreezeController
。
所以,我的问题是,我们必须使用BreezeController
吗?我们如何使用它返回自定义视图模型?或者,如果我们使用常规ApiController
以获得更大的灵活性,我们如何才能提供Metadata
?
答案 0 :(得分:3)
“BreezeController”只是具有'BreezeController'属性的任何API控制器。
“BreezeController”只是一个.NET属性,可帮助.NET WebApi通过OData“语法”提供对查询过滤和排序的支持,以及对实体图和类型标识的json序列化支持。类型标识很重要,因此breeze可以跟踪其entityManager中的实体并合并查询结果并更新关系属性。
仅当您希望服务器提供有关查询可以返回的类型的元数据时,才需要“元数据”方法。也可以在“客户端”提供相同的元数据,这样您就不必实现此方法。 breeze示例zip中的NoDb示例包含此示例。
没有微风要求您返回域模型而不是视图模型。要么有效。您只需提供您使用的任何模型返回的类型的元数据。如果要基于某些任意客户端信息执行自定义服务器端逻辑,还要查看EntityQuery'withParameters'方法。