4

Entity Framework 5 でストアド プロシージャを関数としてインポートしようとすると、次のエラーが発生します。最近、新しいバージョンの EF を参照するようにデータ プロジェクトを更新しました。

ExecuteFunction の型パラメーター 'SSDS.Data.testy_Result' は、関数によって返される型 'SSDS.Data.testy_Result' と互換性がありません。

どのストアド プロシージャでも機能させることができません...これが私の簡単なテストです。

CREATE PROCEDURE testy

AS
BEGIN
    select 'hello' as hello
END
GO

上記の例外で壊れます:

 public virtual ObjectResult<testy_Result> testy()
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<testy_Result>("testy");
    }

また、モデル デザイナーの [関数のインポートの編集] ウィンドウで結果を文字列スカラーに設定しても、エラーは発生しません。

私は次のように関数を呼び出しています:

private Entities db = new Entities();
var x = db.testy();

ここで私が見逃していることは明らかですか?私のプロジェクトにはいくつかの edmx ファイルがあり、他のファイルは古いバージョンの EF で作成されています (そして ObjectContext を使用しています)。

関数のマッピング:

ここに画像の説明を入力

その他の関数マッピングの詳細:

ここに画像の説明を入力

testy_Result クラス:

  public partial class testy_Result
    {
        public string hello { get; set; }
    }
4

2 に答える 2

0

これが役立つかどうかはわかりませんが、私が通常行っていることは次のとおりです。

Entity Framework から次の POCO クラスがあると仮定します。

using System;

public partial class testy_Result
{
    public string hello { get; set; }
}

次の呼び出しは、通常、私にとってはうまくいきます。

public partial class Entities: DbContext
{

    public virtual ObjectResult<testy_Result> testy()
    {
        ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(testy_Result).Assembly);

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<testy_Result>
            ("testy", MergeOption.OverwriteChanges);
    }
}

また、念のため、呼び出しを using 句内にラップします。

        try
        {
            using (Models.Data.Entities Entities = new Models.Data.Entities())
            {
                var x = Entities.testy().FirstOrDefault().hello;
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
        }

うまくいったかどうか教えてください。

乾杯。

于 2013-06-21T00:31:25.790 に答える