Aufruf ich auf folgende Weise eine gespeicherte Prozedur von Entity Framework zu nennen versuchen:eine ganze Zahl resultiert aus einer gespeicherten Prozedur Get Entity Framework fehl verwenden, wenn Context.Database.SqlQuery <int>
Context.Database.SqlQuery<int>(sqlSP, params).FirstOrDefault();
aber ich bekomme diese Fehler:
The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types
Mit LinqPad Sie, dass die gespeicherte Prozedur funktioniert sehen
Der generierte Code aus LinqPad für den gleichen Anruf in SQL ist die folgende
-- 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
Die gespeicherte Prozedur immer eine ID in der folgenden Art und Weise zurück:
select @id = SCOPE_IDENTITY() from TEMPTABLE
Return @id
ich dies auch versucht:
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;
Aber ich bekomme einen weiteren Fehler mit diesem Ansatz: Bei der Ausführung eines Befehls, parametrierte rs müssen ausschließlich Datenbankparameter oder Werte sein. Was kann hier das Problem sein?
Der Rückgabewert ist anders als ein Ergebnissatz. Die SqlQuery gibt die Ergebnismenge zurück. Ich bin nicht so vertraut, aber Sie können möglicherweise auf den Parameter mit der Richtung 'ReturnValue' von' params' zugreifen (was ein Schlüsselwort ist, also nicht verwenden) – Crowcoder