如何在ODataModelBuilder中定义多个模型类

时间:2016-01-19 11:36:49

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

我有一个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));


        }

但是得到错误:

  

实体集&#39;客户&#39;已经配置了不同的   实体类型(&#39;客户&#39;)。                    参数名称:entityType

应该做什么?

  

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

1 个答案:

答案 0 :(得分:3)

您必须使用其他别名/名称。

而不是

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

使用

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