Asp.net mvc 4 我必须使用BreezeController吗?

Asp.net mvc 4 我必须使用BreezeController吗?,asp.net-mvc-4,asp.net-web-api,breeze,Asp.net Mvc 4,Asp.net Web Api,Breeze,正在使用BreezeController提供APIEFContextProvider用于提供元数据字符串和SaveChanges()等方法 问题是:它直接与DbContext对话。我仍然希望能够灵活地返回自己的视图模型,而不是那些域模型 在常规的ApiController中,我们可以轻松返回自己的视图模型。但是如果我转到常规的ApiController,在调用api时,breeze会要求元数据,它由 [HttpGet] public string Metadata() { return

正在使用BreezeController提供API
EFContextProvider
用于提供
元数据
字符串和
SaveChanges()
等方法

问题是:它直接与
DbContext
对话。我仍然希望能够灵活地返回自己的视图模型,而不是那些域模型

在常规的
ApiController
中,我们可以轻松返回自己的视图模型。但是如果我转到常规的
ApiController
,在调用api时,
breeze
会要求
元数据,它由

[HttpGet]
public string Metadata() {
    return _contextProvider.Metadata();
}
如果我们使用的是
BreezeController

所以,我的问题是,我们必须使用
BreezeController
?如何使用它返回自定义视图模型?或者,如果我们使用常规的
ApiController
以获得更大的灵活性,我们如何提供
元数据?

一个“BreezeController”就是任何具有“BreezeController”属性的API控制器

“BreezeController”只是一个.NET属性,它帮助.NET WebApi通过OData“语法”提供查询过滤和排序支持,并为实体图和类型标识提供json序列化支持。类型标识非常重要,这样breeze就可以跟踪entityManager中的实体,合并查询结果并更新关系属性

只有当您希望服务器提供有关查询可以返回的类型的元数据时,才需要“Metadata”方法。同样的元数据也可以提供给“客户端”,这样您就不必实现此方法。breeze示例zip中的NoDb示例包含一个这样的示例

不需要返回域模型而不是视图模型。两种方法都有效。您只需为使用的任何模型返回的类型提供元数据。如果您想基于一些任意客户端信息执行自定义服务器端逻辑,还可以查看EntityQuery“withParameters”方法