在映射到服务器上的DTO时,在微风中使用expand

时间:2016-02-25 01:06:37

标签: breeze

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

我使用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之类的工具,如果这样可以解决或简化问题)

谢谢

1 个答案:

答案 0 :(得分:1)

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

请参阅this answerthis answer,了解其运作方式。