Asp.net web api 如何在WebAPI Odata V4中公开数据库视图

Asp.net web api 如何在WebAPI Odata V4中公开数据库视图,asp.net-web-api,odata,Asp.net Web Api,Odata,我已将视图从数据库导入edmx,并将[Key]属性添加到模型POCO类: 命名空间TFOMS.Domain.Model { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; public partial class vw_Tariffs_PR { public int TariffId { get; s

我已将视图从数据库导入edmx,并将[Key]属性添加到模型POCO类:

命名空间TFOMS.Domain.Model

{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;

    public partial class vw_Tariffs_PR
    {

        public int TariffId { get; set; }
        public string MCOD { get; set; }
        public string OrgName { get; set; }
        public Nullable<int> IDPR { get; set; }
        public string PRNAME { get; set; }
        public Nullable<int> IDSP { get; set; }
        public string SPNAME { get; set; }
        public Nullable<byte> isChild { get; set; }
        public decimal tariff { get; set; }
        public System.DateTime DATEBEG { get; set; }
        public Nullable<System.DateTime> DATEEND { get; set; }
    }
}
内嵌GlobalConfiguration.Configure(WebApiConfig.Register); {“ValueFactory尝试获取对此实例的属性值的访问权限。”}


谁能解释一下如何在odata controller中公开视图,我做错了什么?

问题在于WebApiConfig.cs中的路由顺序,odata路由必须在webapi路由之后:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Web API configuration and services
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<vw_Tariffs_PR>("vw_Tariffs_PR");
            var model = builder.GetEdmModel();
            config.MapODataServiceRoute(
            routeName: "ODataRoute",
            routePrefix: "odata",
            model: model);

        }
    }
公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
//Web API路由
config.maphttpAttribute路由();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
//Web API配置和服务
ODataModelBuilder=新ODataConventionModelBuilder();
建筑商实体集(“vw_关税_PR”);
var model=builder.GetEdmModel();
config.MapODataServiceRoute(
routeName:“ODataRoute”,
routePrefix:“odata”,
模型:模型);
}
}
public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        // Код, выполняемый при запуске приложения
        AreaRegistration.RegisterAllAreas();
        **GlobalConfiguration.Configure(WebApiConfig.Register);**
        RouteConfig.RegisterRoutes(RouteTable.Routes);            
    }
}
public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Web API configuration and services
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<vw_Tariffs_PR>("vw_Tariffs_PR");
            var model = builder.GetEdmModel();
            config.MapODataServiceRoute(
            routeName: "ODataRoute",
            routePrefix: "odata",
            model: model);

        }
    }