【问题标题】:Is it possible to host two different Odata models in a Web API service是否可以在 Web API 服务中托管两个不同的 Odata 模型
【发布时间】:2015-01-20 06:44:25
【问题描述】:

是否可以在一个 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

【问题讨论】:

    标签: c# odata asp.net-web-api2


    【解决方案1】:

    你可以这样做:

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

    谢谢。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗨 Rik,我确实有 ODataController 用于 AnimalCar 并将 modal1 添加到 config.Routes.MapODataRoute。我想知道的是如何将modal2 添加到config.Routes.MapODataRoute 谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2010-09-17
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      相关资源
      最近更新 更多