【问题标题】:how do I define multiple model classes inside ODataModelBuilder如何在 ODataModelBuilder 中定义多个模型类
【发布时间】:2016-01-19 11:36:48
【问题描述】:

我有一个OData v4 Endpoint Using ASP.NET Web API,它有两个独立的模型

ModelVer1.Customer.cs

int ID;
string Name;

ModelVer2.Customer.cs

int ID;
string Name;
string Address;

webapiconfig.cs

  public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<ModelVer1.Customer>("Customers");
          // If I use below get error:
          // The entity set 'Customers' was already configured with a different EntityType ('Customer'). Parameter name: entityType
            builder.EntitySet<ModelVer2.Customer>("Customers");


            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: "demo/api",
                model: builder.GetEdmModel());


            config.Services.Replace(typeof(IHttpControllerSelector), new CustomControllerSelector(config));


        }

但出现错误:

实体集“客户”已经配置了不同的 实体类型(“客户”)。 参数名称:实体类型

应该怎么做?

我想我需要做类似model: builder.GetEdmModel() 这样的事情 需要动态生成这个模型来获取所有实体模型 ModelVersion1.Customer 和 ModelVersion2.Customer 等类

【问题讨论】:

    标签: asp.net-web-api odata asp.net-web-api2


    【解决方案1】:

    您必须使用不同的别名/名称。

    代替

    builder.EntitySet<ModelVer1.Customer>("Customers");
    builder.EntitySet<ModelVer2.Customer>("Customers");
    

    使用

    builder.EntitySet<ModelVer1.Customer>("Customers");
    builder.EntitySet<ModelVer2.Customer>("CustomersV2");
    

    【讨论】:

    • 它工作得很好奇怪为什么CustomersV2 它只是名字而已?它是如何指向Customer 表的?对odata有点新,请详细说明谢谢
    • URI中引用了别名,即:myDomain/Customers/。如果您使用相同的别名,则 oData 控制器不再知道它需要对哪个实体执行操作或查询。
    • 是的,我在标头中传递版本号,而 mu 自定义选择器执行路由,这就是为什么名称无关紧要吗?名称是我可以给出的任何东西,但我的自定义选择器为我做了路由,并且域模型已经正确定义,所以它可以工作,对吧?
    • @Neo - 据我了解,这是基于我过去一年在项目中实施 oData 的方式。它被添加到字典中的实体配置,其中键是您传递的名称。然后在您访问路由时访问它,默认约定是路由名称用于使用该字典查找正确的实体类型。我确实发现这篇文章非常有用,但可以避免一些常见的陷阱:blogs.msdn.com/b/davidhardin/archive/2014/12/17/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2021-07-04
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多