2010-06-04 8 views
17

J'ai mis à jour mon modèle avec ma procédure stockée et dans le navigateur de modèle, je peux voir qu'il a également une fonction d'importation.
Mon SP insère un enregistrement s'il n'en existe aucun et renvoie un 1 sinon renvoie 0, assez simple je pense.Comment utiliser le paramètre OutPut dans SP avec EF 4.0

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 

Dans mon code, je vous appelle le SP:

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

Il échoue lors de l'exécution de la SP avec l'erreur suivante:

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

[MISE À JOUR]
En écrivant ceci, j'ai résolu le problème. Dans le concepteur de modèle, le type de retour doit être none, je l'ai eu pour retourner Byte.

Une réponse à cette question pourrait être d'autres améliorations ou changements.

+0

Moi aussi, ont le même problème face à vous .... avez-vous une idée. – Ramakrishnan

Répondre

14

J'ai aussi eu le même problème, changé le type de retour à NONE au lieu de int32. Merci m'a sauvé des heures de débogage

+2

Vous pouvez faire ceci Navigateur de modèle> Importations de fonction> cliquez sur les propriétés de n'importe quelle fonction d'importation> puis sélectionnez le type de retour 'Aucun' –

0

Essayez d'utiliser ce ci-dessous ..

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