为了满足复杂授权的要求,我不得不将查询移出主数据库 - 例如,具有给定授权角色的用户只能查看同一机构中个人的数据。
我使用Breeze .net DocCode sample作为指导,并复制了将域模型映射到DTO的前提。
get { return ForCurrentUser(Context.Orders).Select(o => new Order {
OrderID = o.OrderID,
....
OrderDetails = o.OrderDetails.Select(od => new OrderDetail
{
ProductID = od.ProductID,
UnitPrice = od.UnitPrice
...
})
问题是将映射属性映射到.include(实体框架方法)/ .expansion(breeze方法)现在是映射函数的一个问题(例如,上面的代码将始终返回OrderDetails集合,无论我是否想要他们与否)。如果javascript客户端生成的谓词具有该属性的.expand指令,我仍然只是急切地加载/扩展属性。
这是完全可能的,还是我坚持在服务器上手动定义不同的映射函数,具体取决于我想要扩展的属性? (我很乐意使用诸如automapper之类的工具,如果这样可以解决或简化问题)
谢谢
答案 0 :(得分:1)
您需要使用ODataQueryOptions作为控制器方法的参数。这将为您提供服务器方法中查询谓词的详细信息,以便您可以根据需要应用它们,而不是自动应用它们。这将允许您根据查询扩展或不扩展。
请参阅this answer和this answer,了解其运作方式。