戻り値の型をエンティティにマップすることが唯一の問題であるため、回避策の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の間で正確に同じ列名を設定してください。 トビー
感謝を。 UIは、スカラー型とヌル型を選択できるので、欺瞞的です。 –
私はCreateDbCommandを使用する際のフォローアップの質問があります。参照:回避策については、http://stackoverflow.com/questions/587173/execute-a-stored-procedure-in-entity-framework-from-within-an-ado-net-dataservice –