を呼び出すときに、私は次のようにEntity Frameworkのからストアドプロシージャを呼び出すためにしようとしているEntity Frameworkのを使用して失敗したから整数の結果を取得します。エラー:LinqPadでストアドプロシージャがContext.Database.SqlQuery <int>
The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types
あなたはストアドプロシージャが
を働いていることがわかります私もこれを試みselect @id = SCOPE_IDENTITY() from TEMPTABLE
Return @id
:
SQLで同じ呼に対するLinqPadから生成されたコードは以下
-- Region Parameters
DECLARE @RETURN_VALUE Int
DECLARE @contenttype VarChar(50) = ''
DECLARE @image VarBinary(1000) = null
DECLARE @applicationid Int = 81725
DECLARE @statusid Int = 10
DECLARE @notes VarChar(1000) = ''
DECLARE @requestuserid Int = 59
DECLARE @assigneduserid Int = 655
DECLARE @parentid Int = 0
DECLARE @eventid Int = 0
DECLARE @discipline Int = 5
DECLARE @replyby DateTime = '2017-09-14 16:22:40.082'
DECLARE @workitemid Int = 81725
DECLARE @messagetype Int = 2
DECLARE @inspectionid Int = 6081
DECLARE @floor SmallInt = 3
-- EndRegion
exec @RETURN_VALUE = [dbo].[usp_InsertInspectionEventPublic] @contenttype, @image, @applicationid, @statusid, @notes, @requestuserid, @assigneduserid, @parentid, @eventid, @discipline, @replyby, @workitemid, @messagetype, @inspectionid, @floor
ストアドプロシージャは、常に次のようにIDを返すある
var returnCode = new SqlParameter("@ReturnCode", SqlDbType.Int);
returnCode.Direction = ParameterDirection.ReturnValue;
var sql = "exec @ReturnCode =dbo.usp_insertinspectioneventpublic @contenttype, @image, @applicationid, @statusid, @notes, @requestuserid, @assigneduserid, @parentid, @eventid, @discipline, @replyby, @workitemid, @messagetype, @inspectionid, @floor";
var data = Context.Database.SqlQuery<int>(sql, returnCode, inParameters);
var res = data.FirstOrDefault();
return res;
しかし、私はそのアプローチで別のエラーが発生しています:コマンドを実行するとき、paramerte rsは排他的にデータベースのパラメータまたは値でなければなりません。 ここで問題がありますか?
戻り値は結果セットとは異なります。 SqlQueryは結果セットを返します。私はよく知られているわけではありませんが、 'params'の方向(' 'ReturnValue'')でパラメータにアクセスすることができます(これはキーワードなので使わないでください) – Crowcoder