2

待办事项列表示例使用 BreezeController 来提供 API 。EFContextProvider用于提供Metadata字符串和方法,如SaveChanges().

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

在常规ApiController中,我们可以轻松地返回我们自己的视图模型。但是,如果我转向常规ApiController,在调用 api 时,会breeze询问Metadata由提供的

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

如果我们使用BreezeController.

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

4

1 回答 1

3

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

“BreezeController”只是一个 .NET 属性,它帮助 .NET WebApi 通过 OData“语法”提供对查询过滤和排序的支持,以及对实体图和类型标识的 json 序列化支持。类型标识很重要,因此微风可以跟踪其 entityManager 中的实体并合并查询结果并更新关系属性。

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

返回域模型而不是视图模型并没有轻而易举的要求。要么工作。您只需为您使用的任何模型返回的类型提供元数据。如果您想根据一些任意客户端信息执行自定义服务器端逻辑,还请查看 EntityQuery 'withParameters' 方法。

于 2013-03-06T18:10:15.580 回答