2017-02-08 12 views
0

私は、Oracleデータベースを扱うAsp.net MVC Webアプリケーションで作業しています。統計ダッシュボードページがあります。.netフレームワークからOracleのストアドプロシージャを呼び出す方法は?

私はEntity FrameworkをODP.Netでコードファーストで使用していますが、Entity Frameworkのクエリが非常に複雑であるため、このページのパフォーマンスの問題に直面しています。

したがって、Entity Frameworkクエリをストアドプロシージャに変換する必要があります。

は、例えば:私は自分のコードにデータセットを戻すには、このSPに別の選択を追加する方法

CREATE OR REPLACE PROCEDURE Schema.DashBoardStatistics 
    (
    -- Add the parameters for the stored procedure here 
    p_YearId number, cur OUT SYS_REFCURSOR 
    ) 
AS 
BEGIN 
    -- select top 5 Fields By rating Rating 
    Open cur FOR Select * FROM Schema."Logs" where Schema."Logs"."Id"= p_YearId ; 

END; 
/

ヒキガエル

に次のストアドプロシージャを作成しましたか?

これをコードから呼び出して、このデータセットをモデルクラスで受け取るにはどうすればよいですか?

お知らせ:私は私のエンティティに

感謝を返すデータセットをマップできるようにするには、ストアドプロシージャではないADO.NET を実行するために、エンティティフレームワーククエリを使用したいです!

+2

[C#からOracleストアドプロシージャを呼び出す]の可能な複製?(http://stackoverflow.com/questions/3940587/calling-oracle-stored-procedure-from-c) – Igor

+0

1.エンティティをストアドプロシージャにマップすることができます誰もあなたのためのコードを書くつもりはありません。最善の策は、Entity Frameworkとストアドプロシージャのチュートリアルに従うことです(多くの方法があります)。あなたが立ち往生したら(*試しに*する必要があります)、それを打ち、いくつかのコードで戻ってきてください。 2.ストアドプロシージャを手動で実行し、結果をエンティティにマップする場合、重複リンクはある程度有効です。 – Igor

+0

EFはCRUDに適しています。これのために - それほど多くはありません。モデルのプロパティに結果セットフィールドを一致させることができるモデルハイドレーターを作成します。どのように2を選択するのですか? - 'p_YearId number、cur1 OUT SYS_REFCURSOR、cur2 OUT SYS_REFCURSOR' –

答えて

1

は、このチュートリアルの途中で例を参照してください:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/2015/entityframework_linq_modelfirst/Entity%20Framework%20LINQ%20and%20Model%20First.html

キーを使用すると、REF CURSORのメタデータの設定ファイルを必要とするということです。 Visual Studio用のOracle Developer Toolsをインストールし、サーバー・エクスプローラのメニューを使用してストアド・プロシージャを実行する必要があります。これにより、参照カーソルのメタデータを含む必要な設定ファイルを自動生成するオプションが提供されます。

次に、ウォークスルーにしたがって、SPをエンティティ関数にマップする[関数のインポート]ダイアログに入力します。

関連する問題