2010-06-04 8 views
17

Zaktualizowałem mój model za pomocą mojej procedury przechowywanej iw przeglądarce modelu widzę, że ma także import funkcji.
Mój SP wstawi rekord, jeśli go nie ma i zwróci wartość 1, która zwraca 0, wydaje mi się całkiem prosta.Sposób korzystania z parametru OutPut w SP z 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 

W moim kodu Wołam SP:

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

Jest braku podczas wykonywania SP z powodu następującego błędu:

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

[UPDATE]
Kiedy to pisałem, rozwiązałem problem. W projektancie Modelu typem zwracanym nie powinno być żadne, musiałem zwrócić Byte.

Odpowiedz na to pytanie mogą być dalsze ulepszenia lub zmiany.

+0

Ja też mam ten sam problem masz z widokiem .... nie masz pojęcia. – Ramakrishnan

Odpowiedz

14

Ja też miałem ten sam problem, zmieniono typ powrotu na NONE zamiast na int32. Dzięki uratował mnie godzinach debugowanie

+2

Możesz to zrobić Przeglądarka modeli> Import funkcji> kliknij właściwości importu dowolnej funkcji> następnie wybierz typ zwrotu "Brak" –

0

Spróbuj użyć tego poniżej ..

// Output Parameter 
System.Data.Objects.ObjectParameter paramSuccess1 = 
    new System.Data.Objects.ObjectParameter("Success", typeof(bool)); 
_Entity.User_UpdateMessage(id, userId, paramSuccess1); 
Powiązane problemy