我有一个简单的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扩展项目的分支(而不是运行时项目)
非常感谢!