映射到服务器上的 DTO 时使用 expand in breeze

use of expand in breeze when mapping to DTOs on the server

为了满足复杂授权的要求,我不得不将查询从主数据库中移出 - 例如,具有给定授权角色的用户只能查看同一机构中个人的数据。

我正在使用 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(entity framework方法)/.expand(breeze方法)现在是映射函数的关注点(例如上面的代码总是return OrderDetails 集合,无论我是否需要它们)。如果 javascript 客户端生成的谓词具有针对 属性.

的 .expand 指令,我仍然只想热切地 load/expand 属性

这是完全可能的,还是我坚持在服务器上手动定义不同的映射函数,具体取决于我想要扩展的属性? (如果可以解决或简化问题,我很乐意使用 automapper 等工具)

谢谢

您需要使用 ODataQueryOptions 作为控制器方法的参数。这为您提供了服务器方法中查询谓词的详细信息,以便您可以根据需要应用它们,而不是让它们自动应用。这将让您根据查询展开或不展开。

请参阅 and this answer 了解其工作原理。