gpt4 book ai didi

c# - Odata V4 $Select after $expand 一对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:48 24 4
gpt4 key购买 nike

我在 WebAPI (Microsoft.ASPNet.WebApi 5.2.4.net Framework) 和 EntityFramework 6.0 下使用 Microsoft 的 Odata v4 (Microsoft.ASPNet.OData 7.0.1) 实现,我无法确定我是否做错了什么,或者 Microsoft 的实现不支持该功能。如果不支持,我该如何自己实现?

我有两个具有一对一关系的实体。 (比如 Employee 和 EmployeeDetails)。

http://localhost/odata/Employee?$expand=EmployeeDetails 工作正常。
但是 http://localhost/odata/Employee?$expand=EmployeeDetails($select=Foo) 失败并显示“URI 中指定的查询无效。属性‘Foo’不能用于$select 查询选项。”

实体类定义如下:

public partial class Employee
{
[Key]
public int EmployeeID {get;set;}
[ForeignKey{"EmployeeDetail"}]
public int EmployeeDetailsID {get;set;}


}
public partial class EmployeeDetail
{
[Key]
public int EmployeeDetailsID {get;set;}
public string Foo {get;set;}
public string Fum {get;set;}
}

Controller 很简单:

EFModel _db = new EFModel();

[EnableQuery(PageSize = 20,MaxExpansionDepth = 4,AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<Employee> Get()
{
return _db.Employees;
}
[EnableQuery(PageSize = 20,MaxExpansionDepth = 4,AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<Employee> GetEmployees()
{
return _db.Employees;
}

使用传统的模型构建器,我允许对两个实体进行过滤和展开。

不想使用单一 View ,因为我的“员工”数据非常广泛,并且希望有多个一对一的关系。

配置代码

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapODataServiceRoute("odata", "odata", ModelBuilder.GetEdmModel())
}
}

模型生成器类

public static class ModelBuilder
{
public static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
var EmployeeEntity = builder.EntitySet<Employee>("Employees");
EmployeeEntity.EntityType.Filter().Expand().Select().Count();

var EmployeeDetailEntity = builder.EntitySet<EmployeeDetail>("EmployeeDetails");
EmployeeDetailEntity.EntityType.Filter().Expand().Select().Count();

return builder.GetEdmModel();
}
}

最佳答案

如前所述,上面的示例代码经过少量更正后可以正常工作,并且可以放回示例项目中。从那以后,我重建了我的原始项目,现在相信问题是我原始代码中的错误/拼写错误。

关于c# - Odata V4 $Select after $expand 一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com