S'p*_*'Kr 4 asp.net entity-framework-4 odata asp.net-mvc-4 asp.net-web-api
我有一个返回 的 MVC4 WebAPI 控制器IQueryable,因此我可以$filter在 URL 中使用 和 朋友来操作来自 REST 端点的结果。这是我的控制器:
public class EnrollmentController : ApiController
{
[Queryable]
public IQueryable<tblEnrollment> Get()
{
var context = new ProjectEntities();
context.ContextOptions.LazyLoadingEnabled = false;
return context.tblEnrollment.AsQueryable();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,就像这张海报一样,我想让 JSON 输出格式有点不同,以便与 Ember Data 的预期格式更加友好。所以我想返回这个:
return new { enrollment = context.tblEnrollment.AsQueryable() };
Run Code Online (Sandbox Code Playgroud)
但是,这会破坏 OData 功能,因为我没有将其返回IQueryable到 WebAPI 层。所以,我想知道是否有办法做这样的事情:
return new { enrollment = context.tblEnrollment.AsQueryable().ApplyOData() };
Run Code Online (Sandbox Code Playgroud)
我确信这是真的……但是有没有某种方法可以显式处理 OData 参数,而IQueryable不是让 WebAPI 层在从Get方法返回的结果集上隐式处理?或者还有其他方法可以完成我在这里想要的事情吗?
顺便说一句,我暂时停留在 EF4 上,因为我无法升级到 VS2012(因此无法升级到 .NET4.5,进而升级到 EF5)。如果有帮助的话,理论上我可以升级到 EF 4.3.1。
您可以添加 ODataQueryOptions 类型的参数并手动应用它,而不是将操作标记为 [Queryable]。它可能如下所示:
public class EnrollmentController : ApiController
{
public object Get(ODataQueryOptions<tblEnrollment> query)
{
var context = new ProjectEntities();
context.ContextOptions.LazyLoadingEnabled = false;
var queryResults = query.ApplyTo(context.tblEnrollment.AsQueryable());
return new { enrollment = queryResults };
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |