0

모두, OData을 사용하여 저장 프로 시저 노출에 대한 지침을 찾고 있습니다.Odata 사용 ASP.NET 웹 API를 사용하여 저장 프로 시저 호출

이미 노출 된 기존 WEB-API 앱을 수정 중입니다. OData. 현재 SQL Server에서 테이블과 뷰를 노출하고 있으며 이제는 Stored procedures를 노출해야합니다. 현재 저장 프로 시저 (Stored Procedure)는 많은 매개 변수를 허용하고 백 엔드 데이터베이스에서 소수의 테이블로 변경 내용을 푸시합니다. 내가 순진 지원되는 저장 프로 시저가 의 하나로, OData 수 없음을 이해, Actions and Functions in OData v4 Using ASP.NET Web API 2.2 :이 가이드를 따라하기 위해 노력했습니다

<packages> 
    <package id="EntityFramework" version="6.1.3" targetFramework="net45" /> 
    <package id="EntityFramework" version="6.0.2" targetFramework="net45" /> 
    <package id="LinqKit" version="1.1.1" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Cors" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.OData" version="5.2.1" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi" version="5.2.0" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Cors" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.0" targetFramework="net45" /> 
    <package id="Microsoft.Data.Edm" version="5.6.3" targetFramework="net45" /> 
    <package id="Microsoft.Data.OData" version="5.6.3" targetFramework="net45" /> 
    <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net45" /> 
    <package id="Microsoft.OData.Client" version="6.8.1" targetFramework="net45" /> 
    <package id="Microsoft.OData.Core" version="6.6.0" targetFramework="net45" /> 
    <package id="Microsoft.OData.Core" version="6.8.1" targetFramework="net45" /> 
    <package id="Microsoft.OData.Edm" version="6.6.0" targetFramework="net45" /> 
    <package id="Microsoft.OData.Edm" version="6.8.1" targetFramework="net45" /> 
    <package id="Microsoft.Spatial" version="6.6.0" targetFramework="net45" /> 
    <package id="Microsoft.Spatial" version="6.8.1" targetFramework="net45" /> 
    <package id="Newtonsoft.Json" version="6.0.5" targetFramework="net45" /> 
    <package id="Patches.System.Web.OData" version="5.3.0-datetimefixes" targetFramework="net45" /> 
    <package id="System.Linq.Dynamic" version="1.0.2" targetFramework="net45" /> 
    <package id="System.Spatial" version="5.6.3" targetFramework="net45" /> 
</packages> 

: 여기

프로젝트에서 사용하는 패키지입니다.

기존 응용 프로그램을 수정하고 WebApiConfig 내부에 모델과 배선을 추가했습니다. 저장 프로 시저에 대해 정의 된 기본 키가 안 ... 말도없이

enter image description here

가 간다 : 내 첫 번째 실행에 나는 다음과 같은 오류가 발생했습니다.

"vw_tickets_all_tables"에 액세스하려고하고 있는데도 오류가 발생합니다 ... 오류로 인해 전체 애플리케이션이 중단된다고 추측합니다.

모델 :

public class InsertUpdateTicketsPJMTickets : DbContext 
{ 
    public InsertUpdateTicketsPJMTickets() 
      : base("name=InsertUpdateTicketsPJMTickets") 
    { 
    } 
    public DbSet<InsertUpdateTicketsPJMTicketsBase> InsertUpdateTicketsPJMTickets { get; set; } 
} 
public partial class InsertUpdateTicketsPJMTicketsBase 
{ 
    string ticketType{set; get;} 
    string category{set; get;} 
    string title{set; get;} 
    string details{set; get;} 
    Nullable<bool> isHtml{set; get;} 
    // bunches of fields left out for brevity 
    string lastUpdateBy{set; get;} 
    string createdBy{set; get;} 
    string creationName{set; get;} 
    string revisionName{set; get;} 
} 

WepApiConfig :

public static IEdmModel GetUOMSModel() 
{ 
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 
    builder.ContainerName = "UOMSContext"; 
    builder.EntityType<Models.UOMS.DBO.InsertUpdateTicketsPJMTickets>() 
     .Action("Execute"); 

    var function = builder.Function("GetParameters"); 

    function.Parameter<string>("ticketType"); 
    function.Parameter<string>("category"); 
    function.Parameter<string>("title"); 
    function.Parameter<string>("details"); 
    // bunches of fields left out for brevity 
    function.Parameter<int?>("inputTicketId"); 
    function.Parameter<string>("lastUpdateBy"); 
    function.Parameter<string>("createdBy"); 
    function.Parameter<string>("creationName"); 
    function.Parameter<string>("revisionName"); 
    function.ReturnsCollectionFromEntitySet<Models.UOMS.DBO.InsertUpdateTicketsPJMTickets>("InsertUpdateTicketsPJMTickets"); 
} 

나는 "키 일단 CONTROLLER을 추가 할 것입니다 여기에

내가 지금까지 가지고있는 코드입니다 "문제가 해결되었습니다.

읽어 주셔서 감사합니다.

답변

0

엔티티 유형 InsertUpdateTicketsPJMTickets에 대한 키를 추가 했습니까?

엔터티 유형 builder.EntityType<Models.UOMS.DBO.InsertUpdateTicketsPJMTickets>() 을 추가하고 InsertUpdateTicketsPJMTickets이라는 엔터티 집합을 만들려고합니다.

OData 사양에서 각 엔터티 형식은 키가있는 구조 형식입니다.

당신은 할 수 있습니다 :

  1. 전화 유창함 API는 key

로 만들려는 재산에 [키] HasKey

  • 추가 속성을