微风过滤。在服务器端扩展

2023-12-03

我正在尝试BreezeJS。有一个要求我可以使用.expand在客户端代码中,但基于role对于该用户,服务器端不会返回该用户的所有记录.expand请求的类型。我尝试创建一个自定义BreezeQueryable属性并重写一个方法来完全过滤掉额外的数据,只是为了尝试。但它抛出了一个异常。

我没有看到任何可以在服务器端执行此操作的入口点。

请引导我走向正确的方向,或者如果不可能的话请告诉我。我只能访问通用的IQueryable,我该如何对此执行查询?

这是一些示例代码:

Server:

[BreezeController]
[EnableCors("*", "*", "*")]
public class MyDataController : ApiController
{
    readonly EFContextProvider<MyDbContext> _contextProvider;

    public MyDataController()
    {
        _contextProvider = new EFContextProvider<MyDbContext>();
        _contextProvider.Context.Configuration.ProxyCreationEnabled = false;
        _contextProvider.Context.Configuration.LazyLoadingEnabled = false;
    }

    // GET api/<controller>
    //Trying to use a custom attribute to filter data here
    [CustomBreezeQueryable(AllowedQueryOptions = AllowedQueryOptions.All)]
    [HttpGet]
    public IQueryable<MyData> GetAllData()
    {
        var data = _contextProvider.Context.MyData;
        return data;
    }
}

public class CustomBreezeQueryableAttribute : BreezeQueryableAttribute
{
    public override IQueryable ApplyQuery(IQueryable queryable, 
                       ODataQueryOptions queryOptions)
    {
        var data = base.ApplyQuery(queryable, queryOptions);
        //trying to filter out MyDataHistory for MyData for testing, 
        //it throws exception
        //data = data.OfType<MyDataHistory>(); 
        return data;
    }
}

客户端:

breeze.EntityQuery.from("GetAllData").expand('MyDataHistory')
                   .using(this.manager)
                   .execute()
                   .then((data) => {               
                        console.log(data.results[0]);
                        def.resolve(data.results);
                    });

这是exception我在使用时得到OfType,我想过滤,无论如何都不使用它。

{"DbOfTypeExpression requires an expression argument with a polymorphic result type that is compatible with the type argument."}

不完全确定我理解您的问题,但您可以通过 EF“包含”在服务器端执行“扩展”,如下所示:

 [HttpGet]
 public IQueryable<Customer> CustomersAndOrders() {
   var custs = ContextProvider.Context.Customers.Include("Orders");
   return custs;
 }

它将返回“Customer”对象,每个对象的“Orders”属性已完全填充并加载到 Breeze 缓存中。

如果您想实际抑制服务器上给定资源名称的“扩展”,您可以使用 [BreezeQueryableAttribute]。注意AllowedQueryOptions.Expand在下面的示例中,支持的操作列表中省略了。

[HttpGet]
[BreezeQueryable(AllowedQueryOptions = AllowedQueryOptions.Filter | AllowedQueryOptions.Skip | AllowedQueryOptions.Top | AllowedQueryOptions.OrderBy)]
public IQueryable<Employee> Employees() {
  return ContextProvider.Context.Employees;
}

[BreezeQueryableAttribute] 支持与此处描述的 Microsoft [QueryableAttribute] 相同的参数:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

如果您想实际限制/过滤扩展的内容,则另一个选项只能通过自己执行过滤扩展来完成,可能需要借助通过“withParameters”传递到方法中的参数(这是因为 EF 尚不支持过滤“包括”。我还没有测试下面的示例,但总体思路应该可行。

[HttpGet]
public IQueryable<Employee> Employees(double minWeight) {
  var emps = ContextProvider.Context.Employees.Include("Orders").ToList();
  // remove selected orders from what gets returned to the client.
  emps.ForEach(emp => {
    var ordersToRemove = emp.Orders.Where(o => o.Freight < minWeight).ToList();
    ordersToRemove.ForEach(o => emp.Orders.Remove(o));
  });
  return emps;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微风过滤。在服务器端扩展 的相关文章

  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 忽略父进程中的信号

    我正在尝试实现一个 shell 程序 我希望 shell 程序忽略 SIG INT ctrl c 但在我的程序中 子进程也会忽略 SIG INT 信号 但它不应该这样做 因为 exec 应该将子进程带到另一个程序 并且该程序默认情况下应该处
  • 使用 R.Net 版本 1.5.5 创建 REngine 实例

    我正在尝试创建一个 Hello World 示例R Language using R Net版本1 5 5 从 NuGet 加载 不幸的是 我见过的在线示例都不起作用 这就是我所做的 已安装Microsoft R Open 3 2 4 增强
  • 合并多边形的高效算法

    我有一个多边形列表 在这个列表中 一些多边形重叠 或者接触其他多边形 我的任务是合并所有相互重叠或接触的多边形 我有一个union执行此操作的方法 做到这一点最有效的方法是什么 我目前能想到的是循环遍历多边形列表 检查合并列表以查看该多边形
  • 不要覆盖 Azure Blob 存储

    我有一种将文件添加到 Azure Blob 存储的方法 问题是我试图指定一个条件 在该条件下它不会覆盖 blob 而只是添加到其中 我正在尝试使用参数访问条件 但是 VS 说这个方法不能采用两个参数 async void archiveNe
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • 有没有办法使用 ews c# 确定电子邮件是否是回复/响应?

    我正在编写一个支持系统 这是我第一次使用 EWS 到目前为止 我已经相当成功了 我可以提取我需要的信息 发送电子邮件 一切正常 我确实有点头疼 有没有办法判断电子邮件是否实际上是回复 该应用程序的基本思想是有人发送电子邮件 我们回复并给他们
  • 使用 Rhino Mocks 模拟集合

    所以我猜这是很多人想做的事情 模拟集合 过去我用 Rhino 做过这样的事情 var col mock MockRepository GenerateMock
  • 使用标准范围连接带有分隔符的字符串范围

    我想使用范围将跨度中包含的四个字节转换为字符串 这是输入和输出的示例 std span
  • 有没有一种方法可以在 TreeView.Nodes 集合中搜索 TreeNode.Text 字段?

    像这样 TreeNode treeNodes treeView Nodes Find searchString true 但我希望它在text字段而不是name field 我不知道有任何内置方法 但你可以使用 LINQ TreeNode
  • autofac 中的条件组件注册

    是否可以根据其他组件的状态有条件地注册组件 就像是 ContainerBuilder RegisterConditionally
  • 如何将8字节的十六进制数输入到char数组中?

    我想生成以以下开头的十六进制数字序列07060504003020100 下一个数字是0f0e0d0c0b0a0908等等按这个顺序 当我使用unsigned long long int并输出数据的前4位 这意味着0被截断 它打印706050
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • IOS Box2D - 身体遵循基于速度波动的点数组的特定路径

    我有一个关于身体的问题 它遵循特定的路径 首先是将身体移动到目标点的方法 const float destinationControl 0 3f b2Vec2 targetPosition path counter b2Vec2 missi
  • 我们可以向 ServicePointManager.SecurityProtocol 添加四个协议吗?

    我想支持从 ssl3 到 tls 1 2 的所有安全协议 但是在网上搜索时我发现代码为 ServicePointManager SecurityProtocol SecurityProtocolType Ssl3 SecurityProto
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 如何在不加载到内存的情况下对大型 csv 文件进行排序

    我有 20GB csv 文件 如下所示 CallId MessageNo Information Number 1000 1 a 2 99 2 bs 3 1000 3 g 4 66 2 a 3 20 16 3 b 1000 7 c 4 99
  • TransactionScope 在某些机器上自动升级到 MSDTC?

    在我们的项目中 我们使用 TransactionScope 来确保我们的数据访问层在事务中执行其操作 我们的目标是not要求在我们的最终用户的计算机上启用 MSDTC 服务 问题是 在我们一半的开发人员机器上 我们可以在禁用 MSDTC 的

随机推荐

  • python for循环和remove方法

    假设我们有一个清单 我想一一说清楚 看看这段代码 code1 gt gt gt x 9 0 8 1 7 2 5 gt gt gt for i in x x remove i gt gt gt x 0 1 2 最后x不清楚 为什么 和 cod
  • 使用 pd.read_clipboard 读取漂亮打印/格式化的数据帧?

    这是另一个数据框question Location Date Value India 2015 03 15 200 India 2015 02 15 140 India 2015 01 15 155 India 2015 12 15 85
  • Linux 中的 getch() 和 getche() 等效项是什么?

    我无法在 Linux 中找到 conio h 的等效头文件 有什么选择吗getch getche Linux 下的函数 我想制作一个开关盒基本菜单 用户只需按一个键即可给出选择 并且进程应该向前移动 我不想让用户在按下他的选择后按下回车键
  • 类型错误:Object(...) 不是 index.js 上的函数

    您好 当我在浏览器中运行代码时出现此错误 类型错误 Object 不是函数 src index js src index js 31 28 28 firebaseStateName firebase 29 29 30 常量初始状态 31 c
  • 如何在 Palantir Foundry 中解析 xml 文档?

    我有一套 xml我想要解析的文档 我以前曾尝试使用获取文件内容并将它们转储到单个单元格中的方法来解析它们 但是我注意到这在实践中不起作用 因为我看到运行时间越来越慢 通常只有一项任务需要执行运行数十小时 我的第一个变换是 xml内容并将其放
  • 带有光标鼠标射线原点的 aframe 嵌入场景

    嵌入场景和鼠标光标选项似乎存在错误 cursor rayOrigin mouse 我在一个盒子上放置了 mouseenter 和 mouseleave 事件来改变它的大小 只要页面包含在浏览器中 它就可以正常工作 但是当页面 可滚动 时 事
  • 使用corona sdk的后台无限

    我正在尝试滚动 Corona sdk 中的背景 无限背景 我重复使用了两张图像 854x176 我尝试了这个功能 function mov self event if self x lt 854 then self x 854 else s
  • 是否可以从本机代码访问 Dalvik VM

    我希望能够使用 Android 中的本机代码来定位 Dalvik VM 这意味着使用中列出的本机类平台 dalvik在 android 源存储库下 我特别想打电话Sync dvmLockObject及其对应物Sync dvmUnlockOb
  • 没有数组的埃拉托斯特尼筛法?

    我必须为 埃拉托斯特尼筛 算法编写一个java代码 以便在控制台上打印出达到给定最大值的素数 但我不允许使用数组 我们的教授告诉我们 只有借助循环才能做到这一点 所以我想了很多 也用谷歌搜索了很多关于这个话题的信息 但找不到答案 我认为这根
  • 无法在 Javafx 应用程序中为 javascript 创建 javax 脚本引擎

    我正在使用 NetBeans 12 0 和 windows 10 64 位 我的 JDK 是 15 0 2 和 JavaFx SDK 16 当我尝试构建我的 javafx 应用程序时 它显示以下构建错误 C Users musta OneD
  • 来自 survfit 对象和 textConnection 的中值

    我使用了其他人的方法来获取中位数survfit对象 即使用textConnecton 但我遇到了几个问题 example library survival data cancer cox ph lt coxph Surv time stat
  • php循环遍历json数组

    我有一个像这样的 json 字符串 fields string fields customers name john id d1 name mike id d2 name andrew id d3 name peter id d4 如何打印
  • PHP 5.3 中的闭包内的 $this 是否有解决方法?

    我的 IDE 警告我 thisPHP 5 4 之前的闭包中不允许使用 是否有解决方法 无需从 5 3 10 升级 PHP 看fire 方法如下
  • 在 UIPageViewController 中禁用页面滚动[重复]

    这个问题在这里已经有答案了 我正在开发使用 UIPageViewController 的应用程序 现在我想禁用页面滚动而不是手势 实际上我想在 UIPageViewController 中包含的视图中绘制签名 为此我需要禁用页面滚动 我已经
  • 如何使用 WEB-INF/lib 中的服务器 jar 覆盖服务器 jar 或使用它们?

    我有一个Web应用程序应该使用WEB INF lib中包含的JSF 2 0库 但它没有 而不是我收到异常 因为我的服务器 JBoss 4 2 也提供了JSF库 我如何强制我的应用程序使用 WEB INF lib 中的 jar Note 当我
  • 在R中使用“unlink”后如何取回文件?

    我不小心删除了一些有用的文件 文件已被删除 我在回收站中找不到它们 我想知道怎样才能拿回来 我使用的是 Windows 8 1 我的文档中的所有文件都在R中使用unlink删除了 我尝试使用R delete来恢复 但它只能恢复从回收站删除的
  • 系统/应用程序中的 APK 何时安装?

    我创建了一个自定义系统映像 并将一个额外的 APK 放入系统 应用程序中 这有点有效 我可以运行该应用程序 但是本机库未加载 loadLibrary 失败 当我打电话时pm install在 APK 上 一切正常并且本地库加载 我的结论是
  • 返回回调(从 CustomView 中打开 DialogFragment)

    这与我之前的问题有关 从 CustomView 中打开 DialogFragment 我现在需要使用回调从 DialogFragment 返回一个值 据我了解 通常会这样做 public class MyDialogFragment ext
  • 如何在乌龟中创建按钮?

    如何在turtle python中创建一个简单的按钮 如果单击它 您可以定义它来打印消息 或者做其他更复杂的事情 You can embed正如 JoshuaNixon 在他的评论中建议的那样 tkinter 中的海龟使用 tkinter
  • 微风过滤。在服务器端扩展

    我正在尝试BreezeJS 有一个要求我可以使用 expand在客户端代码中 但基于role对于该用户 服务器端不会返回该用户的所有记录 expand请求的类型 我尝试创建一个自定义BreezeQueryable属性并重写一个方法来完全过滤