是否可以在 Web API 服务中托管两个不同的 Odata 模型

Is it possible to host two different Odata models in a Web API service

是否可以在单个 Web API 服务中托管两个不同的 OData 模型? 如果是这样,我该如何实现?

例如: 两个模特,

var model1 = new ODataConventionModelBuilder();
builder.EntitySet<Car>("Car");

var model2 = new ODataConventionModelBuilder();
builder.EntitySet<Animal>("Animal");

希望可以通过某种路由实现。

控制器 CarAnimal

public class AnimalController:ODataController{
 //Implementation stuff
}

public class AnimalController:ODataController{
//Implementation stuff
}

和模型构建器

public class ModelBuilder{
    public static IEdmModel GetModal1(){
        var model1 = new ODataConventionModelBuilder();
        builder.EntitySet<Car>("Car");
        return model1.GetEdmModel();
    }

    public static IEdmModel GetModal2(){
        var model2 = new ODataConventionModelBuilder();
        builder.EntitySet<Animal>("Animal");
        return model2.GetEdmModel();
    }
}

Modal1 的路由

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapODataRoute(
        routeName: "OData",
        routePrefix: null,
        model: ModelBuilder.GetModal1());
    }
}

所以问题又是如何添加 modal2

您应该为汽车创建一个 ApiController,为动物创建一个单独的。

你可以这样做:

1-将两个实体集添加到一个Edm模型中。

public class ModelBuilder
    {
        public static IEdmModel GetModal()
        {
           ODataConventionModelBuilder builder= new ODataConventionModelBuilder(); 
           builder.EntitySet<Car>("Car");
           builder.EntitySet<Animal>("Animal");
           return model.GetEdmModel();
        }
    }

2- 为不同的 Edm 模型添加两个端点。

public static void Register(HttpConfiguration config)
    {
        config.Routes.MapODataRoute(
        routeName: "OData1",
        routePrefix: "odata1",
        model: ModelBuilder.GetModal1());

        config.Routes.MapODataRoute(
        routeName: "OData2",
        routePrefix: "odata2",
        model: ModelBuilder.GetModal2());
    }

谢谢。