扩展包含嵌套导航属性

时间:2017-02-14 16:26:25

标签: asp.net-web-api odata-v4 automapper-5

我正在使用Web API构建OData服务。数据库访问通过实体框架处理。

我使用AutoMapper将我的EF实体映射到另一组类。那些映射的类是通过OData服务公开的。

我的模型看起来像这样:

Assignment(int AssignmentId, int EmployeeId, Employee Employee)
Employee(int EmployeeId, ICollection<Skill> Skills)
Skill(int SkillId, string SkillName)

我的OData端点公开IQueryable<Assignment>。使用简单的OData查询($top$select$filter等),一切正常。默认情况下,不会从服务返回Assignment.Employee;我很好。

当我尝试$expand员工时,我收到此错误:

{"error":{"code":"","message":"An error has occurred.","innererror":{"message":"Cannot compare 'member 'Skills' of type '[...].Employee''. Only primitive types, enumeration types and entity types are supported.","type":"System.NotSupportedException"[...]}

[...]实际上并不是错误的一部分,只是我删除的邮件的一部分。

此时我还没有请求Skills,我的期望是Employee.Skills不会扩展,因为我没有明确要求扩展它。我不确定将Skills与将EF关闭的内容进行比较。

我能说的最好的是OData在我应用的任何投影之上应用了一个额外的投影,并且正是该投影存在EF问题。

是否有人使用OData / EF导航具有多个深度级别的属性有经验/成功?

我尝试删除AutoMapper并手动编写表达式,但我仍然遇到同样的错误,所以我不相信AutoMapper在这里引起任何问题。

0 个答案:

没有答案