2009-02-23 5 views
8

エンティティのデータモデルにストアドプロシージャがあり、それを関数のインポートに追加しました。非エンティティの戻り値の型を持つエンティティモデルの関数のインポート

問題は... Visual Studioは、リターンをエンティティタイプに指定した場合にのみ、モデルのコードビハインドに関数コードを生成します。 スカラー型とnull戻り型は機能しません。 Visual Studioは、それらを選択したときに関数コードを生成しません。

紛失しているものがありますか、これはバグですか?
回避策Visual Studio 2008のv9.0.30729.1のSP(サービスパック1)

答えて

8

を使用して


それは機能の不足であるように、それはそんなにバグではありません。 Entity Frameworkは、現在、スカラー値を返すストアドプロシージャをサポートしていません。私はこれが.NET 4.0で変更されると考えています。その間、 CreateDbCommandで利用可能なストア接続を使用して、そのようなストアドプロシージャを実行することができます。

+0

感謝を。 UIは、スカラー型とヌル型を選択できるので、欺瞞的です。 –

+0

私はCreateDbCommandを使用する際のフォローアップの質問があります。参照:回避策については、http://stackoverflow.com/questions/587173/execute-a-stored-procedure-in-entity-framework-from-within-an-ado-net-dataservice –

4

戻り値の型をエンティティにマップすることが唯一の問題であるため、回避策の1つは返されたデータに対応するビューを作成し、そのビューのエンティティを作成することです。これは、SPが戻り値ではなく結果セットを返すSELECTを実行している場合にのみ機能します。 SP:

ALTER PROCEDURE [dbo].[DoSomething] 
    @param1 varchar(50), 
    @param2 varchar(50) 
AS 
BEGIN 
    DECLARE @ID INT 
    SET NOCOUNT ON; 
    INSERT tmp_header (fname, lname) VALUES (@param1, @param2) 
    SET @ID = SCOPE_IDENTITY() 
    SELECT @ID AS 'id' 
END 

VIEW:

CREATE VIEW [dbo].[View_1] 
AS 
SELECT 0 as id 

がView_1に戻り値の型を設定する関数インポートを作成し、モデルを構築し、私はこれがそうのように、サンプルアプリで動作するようになりました。コード内

class Program 
    { 
     static void Main(string[] args) 
     { 
     using (PS_RADSTESTEntities ctx = new PS_RADSTESTEntities()) 
     { 
      EntityConnection ec = ctx.Connection as EntityConnection; 
      ec.Open(); 
      DbTransaction txn = ec.BeginTransaction(); 
      ObjectResult<View_1> result = ctx.DoSomething("Toby", "Kraft"); 
      View_1 row = result.Single(); 
      int id = row.id; 
// do some other interesting things ... 
      ctx.SaveChanges(); 
      txn.Commit(); 
     } 
     } 
    } 

ビューとSPの間で正確に同じ列名を設定してください。 トビー

+0

+1 – walterhuang

関連する問題