Search code examples
asp.net-web-apiodataasp.net-web-api2

how do I define multiple model classes inside ODataModelBuilder


I have one OData v4 Endpoint Using ASP.NET Web API which is having two separate models

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));


        }

But getting error :

The entity set 'Customers' was already configured with a different EntityType ('Customer'). Parameter name: entityType

What should be done?

I guess i need to do something like model: builder.GetEdmModel() need to generate this model dynamically which gets all entity model classes like ModelVersion1.Customer and ModelVersion2.Customer


Solution

  • You have to use a different alias / name.

    Instead of

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

    Use

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