asp.net-web-api – 在ASP.NET WebAPI OData中返回子元素

我正在使用最新的ASP.Net WebAPI Nightly版本(日期为2013-01-16).

我有一个简单的EF数据库一个模型,目前有两个实体 – 患者和访问.每位患者可以多次访问.

我希望能够查询我的患者列表,并让每位患者的访问实体在线返回.我知道WebAPI的OData实现还不支持$expand.我希望这只意味着不支持可选的客户端控制扩展,并且我可以强制扩展服务器端.

目前我没有进行任何内联访问.

例如,我的PatientController的()Get()方法看起来像

[Queryable(AllowedQueryOptions=AllowedQueryOptions.Supported)]
public override IQueryable<Patient> Get()
{
    var query = this.entities.Patients.Include("Visits");
    return query;  
}

我已经验证了针对我的数据库执行的查询确实包含访问信息.

要使用公开的OData服务作为示例,如果您在http://services.odata.org/OData/OData.svc/使用该服务,则可以获得供应商列表.这是http://http://services.odata.org/OData/OData.svc/Suppliers.
您还可以要求提供包含使用http://http://services.odata.org/OData/OData.svc/Suppliers?$expand=Products的产品列表的供应商列表

单步执行ASP.NET代码(通过符号服务器)我已经到了System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer,可以看到它是Createpropertybag方法,它构建了要序列化的属性列表,只是不包括导航属性,除了被写为NavigationLinks之外,它们似乎在其他任何地方都没有被枚举.

我对ASP.NET世界一般都很陌生,并花了一周左右的时间了解事情的发展方向(特别是2012年底对OData所做的更改以及2013年迄今为止的进一步更改) .

我怀疑如果要修改ODataEntityTypeSerializer(我很乐意尝试)将这些额外的信息嵌入到适当的位置(在每个导航链接中作为嵌套的内联Feed尽可能地告诉我),那么我将被设置.

问题:

>我是否忽略了一些明显的东西,我可以设置一个标志来打开这种行为?我可以看到为什么,如果这样的标志存在,它将关闭(EF延迟加载,这个标志不会很好)
>如果#1不是,我可以使用其他一些ODataEntityTypeSerializer吗?如果是这样,我该如何切换到它?
>如果#2不是,那么我应该开始编写自己的指针?有没有我可以在自己的序列化程序中替换的地方,或者我必须维护自己的ASP.NET扩展项目的分支(而不是运行时项目)

非常感谢!

解决方法

在我们支持OData的事物列表中,$expand非常高.但据我所知,我们没有任何标志可以在服务器端打开它.格式化程序当前不允许您替换自己的序列化程序.所以我担心你在此期间唯一的选择就是创建一个fork并添加对$expand的支持.如果您设法让它工作,请考虑以我们的方式发送拉取请求:

http://aspnetwebstack.codeplex.com/SourceControl/network

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....