2010-06-04 1 views
17

Ich habe mein Modell mit meiner gespeicherten Prozedur aktualisiert und im Modellbrowser kann ich sehen, dass es auch einen Funktionsimport hat.
Mein SP fügt einen Datensatz ein, wenn keiner existiert, und gibt eine 1 zurück, gibt 0 zurück, ziemlich einfach, denke ich.Wie man den OutPut-Parameter in SP mit EF 4.0 verwendet

SP

CREATE PROCEDURE [dbo].[User_UpdateMessage] 
(
@UserId int = 0, 
@UserId2 int = 0, 
@Success bit = 0 OUTPUT 
) 
AS 
BEGIN 
SET NOCOUNT ON; 

IF NOT EXISTS (SELECT [UserIdFrom] FROM [dbo].[MessageUpdate] WHERE [UserIdFrom] = @UserId AND [UserIdTo] = @UserId2) 
BEGIN 
    INSERT INTO [dbo].[MessageUpdate] ([UserIdFrom], [UserIdTo]) 
    VALUES (@UserId, @UserId2) 
    SELECT @Success = 1; 
END 
ELSE 
    SELECT @Success = 0; 
END 

In meinem Code ich die SP nenne:

// Output Parameter 
System.Data.Objects.ObjectParameter paramSuccess1 = 
new System.Data.Objects.ObjectParameter("Success", typeof(byte)); 
_Entity.User_UpdateMessage(id, userId, paramSuccess1); 

Es versagt, während die SP mit dem folgenden Fehler ausführen:

The data reader returned by the store data provider does not have enough columns for the query requested

[UPDATE]
Während ich dies schrieb, löste ich das Problem. Im Modell-Designer sollte der Rückgabetyp keiner sein, ich hatte ihn Byte zurückzugeben.

Eine Antwort auf diese Frage könnte weitere Verbesserungen oder Änderungen sein.

+0

Auch ich habe das gleiche Problem, das Sie mit Blick auf .... Sie eine Idee bekommen haben. – Ramakrishnan

Antwort

14

Ich hatte auch das gleiche Problem, änderte den Rückgabetyp auf NONE anstelle von Int32. Dank hat mich gerettet Stunden Debuggen

+2

Sie können dies Modell-Browser> Funktion Importe> klicken Sie auf Eigenschaften eines Funktionsimports> dann wählen Sie Rückgabetyp 'Keine' –

0

Versuchen Sie, diese unter Verwendung ..

// Output Parameter 
System.Data.Objects.ObjectParameter paramSuccess1 = 
    new System.Data.Objects.ObjectParameter("Success", typeof(bool)); 
_Entity.User_UpdateMessage(id, userId, paramSuccess1); 
Verwandte Themen