2017-08-20 22 views
0

私のアプリケーションでコードファーストアプローチを使用しています。私はアプローチを使用してエンティティ(テーブル)を生成しました。今私はコードを介してストアドプロシージャを作成したいと思います。私は移行オプションを試してみて誰かが私を導くことができますか?それは失敗しています。Entity Frameworkコードファースト&ストアドプロシージャ

私はEntity Framework Code Firstアプローチを使用しています。これを使用して、Customerと他のエンティティを作成しました。

今、私は、ストアドプロシージャ「GetCustomers」を使用してコンテキストクラスを作成して、パラメータを渡すと、それはgetcustomer @name nvarchar型プロシージャを作成

以下のように2つのコレクションを返すために持っているコレクション

に結果セットを取得郵便番号はint @(最大)、

名(@name)のようなお客様からの

。SELECT ID、名前、郵便番号など。

。SELECT ID、名前、郵便番号= @郵便番号

は、私が「GetCustomers」を使用してコンテキストクラスをストアドプロシージャを作成したいと手動DB.Iに実行されない結果の下に達成するために必要なお客様から郵便番号:

1.純粋なパス名のパラメータで、最初のコレクションを返す

2.純粋なジップコードパラメータと2番目のコレクションを返します。あなたが生成/作成することができ

答えて

2

をマージ使用して単一のコレクションに1及び2の

3.Combine結果のコレクションは、Entity Frameworkのアドイン 移行オプションを使用してCreateStoredProcedure()メソッドを使用してストアドプロシージャ。

ステップ1パッケージマネージャコンソール追加移行SP_DO_NOT_DELETEを使用して移行スクリプトを生成します。モデルの変更がない場合、システムは以下のような空の移行スクリプトを生成します。

public partial class SP_DO_NOT_DELETE : DbMigration 
    { 
     public override void Up() 
     {  

     } 

     public override void Down() 
     { 

     } 
    } 

ステップ2は:スクリプトを生成した後、とダウンアップ()()以下のようなメソッド内ストアドプロシージャを追加してください。 :以下の例では、 "dbo.GetNextDisplayId"は、ストアドプロシージャを使用してNextAvailableDisplayIdを取得するために使用されるストアドプロシージャ名です。

public partial class SP_DO_NOT_DELETE : DbMigration 
    { 
     public override void Up() 
     {  
     CreateStoredProcedure(
      "dbo.GetNextDisplayId", 
      body: 
       @"DECLARE @requestid INT 
         SELECT @requestid = NextAvailableDisplayId 
         FROM [TrackingNumberHistories] WITH (TABLOCKX) 

         UPDATE [TrackingNumberHistories] 
         SET NextAvailableDisplayId = @requestid + 1 

         SELECT @requestid AS 'NextAvailableDisplayId'" 
     ); 
     } 

     public override void Down() 
     { 
      DropStoredProcedure("dbo.GetNextDisplayId"); 
     } 
    } 

CreateStoredProcedure()でアップ()移行スクリプトを実行するたびメソッドが自動的にストアドプロシージャを作成します。 DropStoredProcedure() in Down()は、移行スクリプトでストアドプロシージャを自動的にロールバック/削除するときに、ストアドプロシージャを削除するために使用されます。

これはあなたが前進するのに役立つかもしれないと思っています!

関連する問題