13

多くの複雑なストアド プロシージャを含む既存のデータベースがあり、これらのプロシージャを EF 4 で使用したいと考えています。次のことを行いました。

  1. EF データ オブジェクトを作成しましたCustomer
  2. ストアド プロシージャを EF に追加しました
  3. EF デザイナーを右クリックし、関数のインポートを追加します。
  4. 関数インポート名 - MyFunction、複合型。

結果のコード:

CustomerEntities entity = new CustomerEntities();
var result = entity.MyFunction("XYZ", ref o_MyString);

これで、ストアド プロシージャには、ref によって (WebForm で) 呼び出していた出力パラメーターが含まれます。しかし、私は以下のエラーが発生しています:

「参照文字列」から「System.Data.Objects.ObjectParameter」に変換できません

助けてください

編集

保存しようとすると、以下のエラーが発生します

マッピング関数バインディングは、サポートされていないパラメーター o_MyString を持つ関数 Model.Store.P_GetCustomer を指定します。出力パラメーターは、R​​owsAffectedParameter プロパティを介してのみマップできます。結果バインディングを使用して、関数呼び出しから値を返します。

4

2 に答える 2

36

出力パラメータはObjectParameterインスタンスで返されます。したがって、次のようなコードを使用する必要があります。

var oMyString = new ObjectParameter("o_MyString", typeof(string));
var result = ctx.MyFunction("XYZ", oMyString).ToList();
var data = oMyString.Value.ToString();

その理由は、データベースからの結果セットを処理するまで出力パラメーターが入力されないため、関数のインポートで ref パラメーターを使用できないためです =ToListストアド プロシージャの結果を呼び出したり反復したりしない場合、出力パラメーターは null になります。

于 2011-05-31T20:52:18.560 に答える
2

msdnは次のことを提案しています。

CREATE PROCEDURE dbo.GetDepartmentName
     @ID INT ,
     @Name NVARCHAR(50) OUTPUT
AS
     SELECT   @Name = Name
     FROM     Department
     WHERE    DepartmentID = @ID

解決

using (SchoolEntities context = new SchoolEntities())
{
   // name is an output parameter.

   ObjectParameter name = new ObjectParameter("Name", typeof(String));
   context.GetDepartmentName(1, name);
   Console.WriteLine(name.Value);
}
于 2014-09-09T07:16:08.150 に答える