如何使用非模型数据扩展Breeze Controller的响应?

时间:2014-10-14 12:43:53

标签: entity-framework odata breeze asp.net-web-api2 dto

我有一个带有Microsoft.Data.Odata 5.6,Breeze.WebApi2 1.5和EF6的Web API 2项目。

使用$select$expand语法,Breeze可以很好地通过导航属性获取查询的详细信息。

我一直在与之斗争的一个问题是,一旦odata查询得到有效解决,如何将一些外部数据包含在生成的实体中。

到目前为止,我的方法包括扩展BreezeQueryableAtribute并尝试捎带结果,以便我可以在将其发送到客户端之前注入我的ad-hoc数据。

有一个过程有点类似于BreezeQueryable属性本身后面的过程

https://github.com/Breeze/breeze.server.net/blob/master/Breeze.WebApi2/BreezeQueryableAttribute.cs

但是,我无法解析响应的结果。这似乎是作为无法回送到IQuerable的匿名Breeze.ContextProvider.DynamicTypeBase返回的,例如

public class CustomBreezeQueryable :BreezeQueryableAttribute 
{

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
    var response = actionExecutedContext.Response;

    //some validation code removed for clarity
    base.OnActionExecuted(actionExecutedContext);

    if (!response.TryGetContentValue(out responseObject))
    {
        return;
    }
    var queryResult = responseObject as IQueryable<MyEntityType>;

    //queryResult is null!

    //apply transforms to resulting entities
    //var dtos = ....

    actionExecutedContext.Response = actionExecutedContext.Request
            .CreateResponse(HttpStatusCode.OK, dtos.AsQueryable());
}}

有趣的是,我实际上可以通过VS&#34; locals&#34;来检查查询的结果。窗口并浏览结果集的内部属性。 因此,就Breeze而言,一切都按预期工作,但我还没有找到一种简单的方法来扩展所产生的结果。

entity inspection

我的猜测是,这个内部Breeze调用queryHelper.WrapResult(request, response, queryResult);产生的包装和格式化是阻止我使用IQueryable的原因。

关于如何将此Breeze.ContextProvider.DynamicTypebase解析回我的标准实体的任何想法? 或者可能采用完全不同的方法?

谢谢,

乌梅

0 个答案:

没有答案