使用EF6存储过程进行OData路由

时间:2015-05-03 22:00:36

标签: sql-server vb.net entity-framework odata asp.net-web-api

我在VB.Net中使用EF6针对SQL Azure数据库编写了一个带有OData的Web API 2 - 所有这些都运行良好。现在我需要添加另一个控制器,它使用传递ID的存储过程返回一组记录。我正在使用EF 6的Database First选项,因此我在SQL中创建了Stored Proc并导入到我的EF模型中。返回的数据与任何现有实体都不匹配,因此它返回EF更新工具创建的复杂类型。

我使用VS 2013脚手架创建了OData控制器,其中只有一个Get动作接受ID并返回存储过程的记录集。我还将控制器名称添加到ODataConventionModelBuilder以设置路由。当我尝试调用Controller(ID)时,它会返回此错误。

{
"odata.error": {
    "code": "",
    "message": {
        "lang": "en-US",
        "value": "No HTTP resource was found that matches the request URI 'http://localhost:54146/odata/UnMappedIOTags1(441)'."
    },
    "innererror": {
        "message": "No routing convention was found to select an action for the OData path with template '~/entityset/key'.",
        "type": "",
        "stacktrace": ""
    }
}

}

我的WebApiConfig.vb包含以下内容:

    Dim builder As New ODataConventionModelBuilder
    '...  12 other entries removed for brevity
    builder.EntitySet(Of IO)("IOs")
    builder.EntitySet(Of mapUnMappedTags_Result)("UnMappedIOTags1")

    config.Routes.MapODataServiceRoute(
                routeName:="odata",
                routePrefix:="odata",
                model:=builder.GetEdmModel(),
                batchHandler:=New DefaultODataBatchHandler(GlobalConfiguration.DefaultServer))

我的控制器看起来像这样。

 Public Class UnMappedIOTags1Controller
    Inherits ODataController
    Private db As New AppasEntities

    <ResponseType(GetType(mapUnMappedTags_Result))> <EnableQuery>
    Function GetUnMappedIOTags1(<FromODataUri> key As Integer) As IQueryable(Of mapUnMappedTags_Result)

        Return db.mapUnMappedTags(key).AsQueryable

    End Function
End Class

我让它在不使用OData路由的Web API控制器中工作,但我更喜欢像项目中的其他14个OData控制器一样实现OData控制器。

我错过了什么?

0 个答案:

没有答案