非エンティティ戻り型のエンティティモデルへの関数のインポート

.net .net-3.5 ado.net entity-framework visual-studio

質問

Entity Data Modelにストアドプロシージャがあり、それを関数インポートに追加しました。

問題は次のとおりです。戻り値をエンティティ型に指定した場合に限り、Visual Studioはモデルの分離コードで関数コードを生成します。 スカラおよびnullの戻り型は機能しません。選択してもVisual Studioで機能コードが生成されません。

足りないものはありますか、それともバグですか?
回避策はありますか?


Visual Studio 2008 v9.0.30729.1 SP(Service Pack 1)を使用する

受け入れられた回答

それは機能の欠如であるのでそれほど多くのバグではありません。 Entity Frameworkは今のところスカラー値を返すストアドプロシージャをサポートしていません。これは.NET 4.0で変更される予定です。当面の間は、 CreateDbCommandで利用できるストア接続を使用して、このようなストアドプロシージャを実行できます。


人気のある回答

現在うまくいく唯一のことは戻り型をエンティティにマッピングすることであるので、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

見る:

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の間で列名を正確に同じに設定してください。トビー



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow