none
Pegar Idenficador de um Retorno de uma Procedure usando Entity Framework RRS feed

  • Pergunta

  •  Boa tarde a todos,

    Estou com um problema em pegar um valor de um retorno de um procedure contendo

    o valor do Incremento automatico da tabela do Sql Server.

     

    Eu tenho a procedure 

    faço o mapeamento

     

    Mas eu não sei como pegar esse valor e atribuir esse valor

    a uma variavel

     

    Alguém pode me dar um ideia?

     

    terça-feira, 11 de outubro de 2011 18:51

Respostas

  • Consegui pegar depois de "sofrer" um pouco...

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Net.NetworkInformation;
    using System.Web;
    using System.Security;
    using System.Data;
    namespace Console
    {
        class Program
        {
            static void Main(string[] args)
            {           
                            
                var codigoOutPut = new System.Data.Objects.ObjectParameter("Codigo",typeof(int));
    
                var entidade = new Bd_EstudoEntities1();
                var retorno = entidade.CadastrarUsuario("Paulo", "p@teste.com", codigoOutPut);
    
                System.Console.WriteLine(retorno.FirstOrDefault().Value);
          
                System.Console.ReadKey();
            }
        }
    }
    

    Tive que configurar o seguinte para poder receber o retorno (neste caso um inteiro):



    A Sp que utilizei foi:
    create PROCEDURE dbo.CadastrarUsuario
    (
    	@Nome varchar (50),
    	@Email varchar (50),
    	@Codigo int OUTPUT 
    )
    
    AS
    
    insert into Usuario (Nome, Email)
    values (@Nome, @Email)
    
    set  @Codigo = SCOPE_IDENTITY()
    select @Codigo AS Codigo;
    









    --
    Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com
    • Marcado como Resposta Vanderney Souza quinta-feira, 13 de outubro de 2011 20:02
    terça-feira, 11 de outubro de 2011 21:51
  • Fiz o teste e deu certo, apesar de que

    eu estava sofrendo atoa, e acabei que usei de outra forma:

     

    Identificador e um tipo Inteiro:

    Dim Orm As New ORMEntities
    
    Identificador = Orm.Tabela_Identificador().First
    


    e na procedure:

    ALTER PROCEDURE [dbo].[SP_TABELA_IDENTIFICADOR]
    
    AS
    	DECLARE @IDENTIFICADOR AS INT
    BEGIN
    
    	SELECT @IDENTIFICADOR =  IDENT_CURRENT('TABELA')
    	
    	SELECT @IDENTIFICADOR + 1
    END
    

     

    Obrigado pela ajuda .

    Abração

    T+

    • Marcado como Resposta Vanderney Souza quinta-feira, 13 de outubro de 2011 20:02
    quinta-feira, 13 de outubro de 2011 20:02

Todas as Respostas

  • Como não???

    A SP você utiliza para que? Insert? Delete? Update?

    Veja se esta video aula te ajuda: http://www.renatohaddad.com/aulas/EF4_StoredProcedureComplexa.rar


    --
    Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com
    terça-feira, 11 de outubro de 2011 18:58
  • Até ai tudo bem, 

    Consegui fazer isso tranquilo só que minha duvida esta relacionada em como pegar um retorno scalar.

    por exemplo se eu for buscar um tipo complex eu posso pegar assim:

     

     

    Try
          Dim Exemplo As New ORMEntities
          Dados = Exemplo.Pesquisar
    
          Return Dados
    Catch Ex As Exception
    
    End Try
    

    Eu não estou conseguindo é pegar quando for um scalar

    pois eu retorno um Int.

     

    T+

     


    • Editado Vanderney Souza terça-feira, 11 de outubro de 2011 19:18 acrecimos
    terça-feira, 11 de outubro de 2011 19:17
  • Eu não entendi. Você utiliza a SP para que???



    --
    Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com
    terça-feira, 11 de outubro de 2011 19:31
  • Usar para retornar um valor do tipo int.

     

    Por exigência tenho que utilizar procedure em tudo que for operação

    no banco de dados. 

    Então eu preciso retorna o Id do proximo registro (incremento automático)

     

    SELECT IDENT_CURRENT('EXEMPLO')
    

     

    Esse valor que não estou conseguindo pegar usando o Entity Framework.

     

     

    terça-feira, 11 de outubro de 2011 19:53
  • Rapaz,

    Você precisa recuperar o valor assim que faz um insert?

    Se for basta você acessar a propriedade do seu objeto após o SaveChanges.....


    --
    Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com
    terça-feira, 11 de outubro de 2011 20:04
  • Bom acho que não estou conseguindo explicar

     

    Mas seria quando eu fosse criar um novo registro, eu buscaria esse valor só que através de um procedure.

     

    "Se for basta você acessar a propriedade do seu objeto após o SaveChanges....."

     

    seria mais ou menos isso, como eu acesso esse valor tipo:

    Dim Resultado As ObjectResult(Of Integer) = Orm.EXEMPLO_Identificador()
    

    Não sei se ainda fui claro o suficiente.

    terça-feira, 11 de outubro de 2011 20:15
  • terça-feira, 11 de outubro de 2011 21:10
  • Consegui pegar depois de "sofrer" um pouco...

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Net.NetworkInformation;
    using System.Web;
    using System.Security;
    using System.Data;
    namespace Console
    {
        class Program
        {
            static void Main(string[] args)
            {           
                            
                var codigoOutPut = new System.Data.Objects.ObjectParameter("Codigo",typeof(int));
    
                var entidade = new Bd_EstudoEntities1();
                var retorno = entidade.CadastrarUsuario("Paulo", "p@teste.com", codigoOutPut);
    
                System.Console.WriteLine(retorno.FirstOrDefault().Value);
          
                System.Console.ReadKey();
            }
        }
    }
    

    Tive que configurar o seguinte para poder receber o retorno (neste caso um inteiro):



    A Sp que utilizei foi:
    create PROCEDURE dbo.CadastrarUsuario
    (
    	@Nome varchar (50),
    	@Email varchar (50),
    	@Codigo int OUTPUT 
    )
    
    AS
    
    insert into Usuario (Nome, Email)
    values (@Nome, @Email)
    
    set  @Codigo = SCOPE_IDENTITY()
    select @Codigo AS Codigo;
    









    --
    Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com
    • Marcado como Resposta Vanderney Souza quinta-feira, 13 de outubro de 2011 20:02
    terça-feira, 11 de outubro de 2011 21:51
  • Paulo,

    Não estou com o codigo em mãos agora, mas

    assim que possível eu vou testar e posto o

    resutado.

     

    Desde já agradeço por sua atenção e paciência.

    T+

    terça-feira, 11 de outubro de 2011 22:20
  • Fiz o teste e deu certo, apesar de que

    eu estava sofrendo atoa, e acabei que usei de outra forma:

     

    Identificador e um tipo Inteiro:

    Dim Orm As New ORMEntities
    
    Identificador = Orm.Tabela_Identificador().First
    


    e na procedure:

    ALTER PROCEDURE [dbo].[SP_TABELA_IDENTIFICADOR]
    
    AS
    	DECLARE @IDENTIFICADOR AS INT
    BEGIN
    
    	SELECT @IDENTIFICADOR =  IDENT_CURRENT('TABELA')
    	
    	SELECT @IDENTIFICADOR + 1
    END
    

     

    Obrigado pela ajuda .

    Abração

    T+

    • Marcado como Resposta Vanderney Souza quinta-feira, 13 de outubro de 2011 20:02
    quinta-feira, 13 de outubro de 2011 20:02