0

すべて、 ODataを使用してストアドプロシージャを公開する方法のガイダンスを参照してください。Odataを使用してASP.NET Web-APIを使用してストアドプロシージャを呼び出す

既に公開されている既存のWEB-APIアプリを変更しています。OData現在、SQL SERVERからテーブルとビューを公開していますが、今はStored proceduresも公開する必要があります。現在のストアドプロシージャは、一連のパラメータを受け入れ、変更をバックエンドデータベースの一握りのテーブルにプッシュします。ここで

は、プロジェクトで使用されるパッケージです:

<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> 

私は、このガイドに従うために働いてきた:私は単純にストアドプロシージャをサポートすることを理解し、Actions and Functions in OData v4 Using ASP.NET Web API 2.2をODataのでは不可能です。

WebApiConfigの既存のアプリケーションを変更し、モデルと配線を追加しました。私の最初の走行では、私は次のエラーを得た:

enter image description here

は、ストアドプロシージャの定義された主キーがあるべきではありません...言うまでもないです。

"vw_tickets_all_tables"にアクセスしようとしていますが、エラーがスローされます...エラーがアプリケーション全体を破壊すると推測します。

ここで私がこれまで持っているコードです:

MODEL:

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 HasKey

  2. あなたはkey

としてそれを作りたいプロパティに属性[キー]を追加します。
関連する問題