如何将多个实体集绑定到一个 odata 控制器?

2023-12-09

我有很多不同的实体想要为其启用 OData。这些实体根据其类型分为不同的组。目前,默认设置是将 EntitySet 与控制器名称相匹配,但我不希望为我拥有的每个实体类型都有一个控制器。有没有一种方法可以将多个 EntitySet 映射到一个控制器。

我尝试让我感兴趣的类型实现一个通用接口,并将该接口指定为我的实体集类型。我还尝试在一个控制器中拥有两个实体并使用它们自己的获取请求,但没有运气。我还尝试定义自己的扩展 EntitySetRoutingConvention 的路由类,但还没有发挥作用。

WebApi配置

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet<MyEntity1>("MyEntity1");
            builder.EntitySet<MyEntity2>("MyEntity2");
            config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
            // Web API routes
            config.MapHttpAttributeRoutes();
        }

这将查找名为 MyEntity1Controller 和 MyEntity2Controller 的控制器。 我想要的是这样的:

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet<MyEntity1>("Generic");
            builder.EntitySet<MyEntity2>("Generic"); // Throws an error since Generic is already registered to MyEntity1
            config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
            // Web API routes
            config.MapHttpAttributeRoutes();
        }

通用控制器.cs

// GET: odata/myentity1
        [EnableQuery]
        public IQueryable<MyEntity1> GetMyEntity1()
        {
            return db.MyEntity1.AsQueryable();
        }

        // GET: odata/myentity2
        [EnableQuery]
        public IQueryable<myentity2> GetMyEntity2()
        {
            return db.MyEntity2.AsQueryable();
        }

预期结果是我可以转到 myurl/Generic/MyEntity1 ,这将在我的通用控制器中触发 GET 请求。我还应该能够执行 odata 操作,例如 myurl/Generic/MyEntity1?$select=Id。


添加 ODataRoute 属性

/// MyController.cs

// GET: odata/myentity1
[EnableQuery]
[ODataRoute("myentity1")]
public IQueryable<MyEntity1> GetMyEntity1() => db.MyEntity1.AsQueryable();

// GET: odata/myentity2
[EnableQuery]
[ODataRoute("myentity1")]
public IQueryable<MyEntity2> GetMyEntity2() => db.MyEntity2.AsQueryable();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将多个实体集绑定到一个 odata 控制器? 的相关文章

随机推荐

  • iOS 3DES 与 ECB 返回一半正确数据

    使用 3DES ECB 算法加密密码时遇到问题 这是我使用的代码 class func encryptPassword pass String gt String let keyString 123456789012345678901234
  • 在 C# 中重用数组

    所以我正在优化一个非常非常频繁地使用字节数组的C 程序 我编写了一种回收池的东西来重用必须由GC收集的数组 像那样 public class ArrayPool
  • 将 mysql 转换为 pdo

    所以我有一个应该处理所有数据执行操作的函数 sql function loadResult sql this gt connect sth mysql query sql rows array while r mysql fetch obj
  • 使用 fastxml.jackson 将 JSON 解析为 Java 记录

    根据设计 Java 记录不能从另一个对象继承 请参阅为什么Java记录不支持继承 所以我想知道实现以下目标的最佳方法是什么 鉴于我的 JSON 数据包含具有一些通用数据 独特数据的对象 例如 类型 宽度和高度适用于所有形状 但根据类型 它们
  • AngularJS 和 jquery 移动

    我通过 AngularJS 中的控制器将 html partial 加载到 ng view 指令中 html 部分看起来像这样 div ul li a href detailsuser a A a li li a href detailsu
  • 将 Http“Post”请求发送到 C 或 C++ 中的 PHP 代码

    我正在尝试向我的 php 文件发送 post 请求并获取信息 它工作正常 但是 在打印 php 文件中的响应之前 它还会打印一些内容 这就是它打印的内容 first HTTP 1 1 200 OK Date Fri 20 Apr 2012
  • ASP.NET MVC 自定义路由 很长的自定义路由在我脑海中没有出现

    今天我花了几个小时阅读有关在 ASP NET MVC 中进行自定义路由的内容 我可以理解如何执行任何类型的自定义路由 如果它从默认路由扩展或类似于 小于默认路由 但是 我正在尝试找出如何执行类似于以下内容的路线 Language Langu
  • 对自定义类的 IEnumerable 中具有特定 ID 的项目求和

    CustomClass int ID int numberToSum float numToAverage IEnumerable
  • Volley速度慢并导致内存泄漏

    在我的项目中 我使用 volley 下载 JSON 流 我解析该流并将其显示在列表视图中 我使用以下方法加载数据 private void loadEventData int year final int month get volley
  • 在您的 delphi 应用程序中托管 WSH(VBScript、JavaScript)?

    我正在寻找从我的 Delphi 应用程序执行用户提供的脚本 是否可以在我的应用程序中托管 Windows 脚本宿主引擎并为其提供要执行的脚本 或者 有更好的方法来解决这个问题吗 P S 我不是在寻找第三方组件 这是完全可能的 并且有大量代码
  • 替换每行中第一次出现的位置

    假设我有一个格式如下的文档 word1 word2 word3 word4 word5 word6 word7 word8 我该如何使用sed将第一次出现的空格替换为逗号后跟空格 以便文档如下所示 word1 word2 word3 wor
  • 在从命令行调用的 Jython 脚本中使用 UCanAccess

    操作系统 Windows7 Jython2 7 0FR 最终版本 尝试将 Gord Thompson 的解决方案与 Jython 结合使用 在没有 ODBC 的情况下从 Java 操作 Access 数据库 我可以让 Ucanaccess
  • 如何在核心java中实现图?

    我有一个有向未加权图 给出了节点的数量和节点之间的所有链接 我尝试使用向量数组来完成该任务 但 java 不支持它 ArrayList 和 Vectors 支持随机访问迭代器 但无法在 java 中执行此操作 因为我是新手 我不想使用二维矩
  • 排序合并的数据框

    作为一个相当新的 R 程序员 我似乎遇到了一个奇怪的问题 可能是我对 R 缺乏经验 在读取连续文件并将其合并到单个数据帧中后 我发现顺序未按预期对数据进行排序 我在每个文件中有多个引用 但每个文件引用在不同时间获得的测量数据 这是代码 li
  • 正确的 Bash 和 shell 脚本变量大写 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我遇到过许多变量全部大写的 shell 脚本 我一直认为这存在严重的误解 我的理解是 按照惯例 也许很久以前就有必要 环境变量全部大写 但在像 Bash 这样的现代脚本环境中 我一直更喜欢
  • Google oauth java 客户端获取访问令牌失败,并显示“400 Bad Request {“error”:“invalid_request”}”

    我正在使用此处显示的 Web 服务器应用程序 示例 在我的回调 servlet 中 我想检索访问令牌 但无法成功执行此操作 以下是我的代码 Override protected String getUserId HttpServletReq
  • UIAnimation的理解

    我正在尝试使用以下代码来执行一些动画 void performSlidingfromX int xx fromY int yy UIImageView Image self getImage UIView beginAnimations n
  • 透明JButton

    是否可以使 JButton 透明 包括边框 但不透明文本 我扩展了 swing 的 JButton 并覆盖了它 Override public void paint Graphics g Graphics2D g2 Graphics2D g
  • 如何使用 DXL 脚本从 IBM Doors 加载特定基线

    我编写了一个从批处理文件运行的 DXL 脚本 它接收一个模块路径 一个基线和一个视图 批处理命令打开 IBM Doors 9 6 后 脚本应该转到具有相关视图的模块路径并加载输入的基线 我的问题是我的脚本加载了current基线而不是我输入
  • 如何将多个实体集绑定到一个 odata 控制器?

    我有很多不同的实体想要为其启用 OData 这些实体根据其类型分为不同的组 目前 默认设置是将 EntitySet 与控制器名称相匹配 但我不希望为我拥有的每个实体类型都有一个控制器 有没有一种方法可以将多个 EntitySet 映射到一个