Usuário com melhor resposta
Pegar Idenficador de um Retorno de uma Procedure usando Entity Framework

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?
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
-
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
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 -
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
-
-
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.
-
-
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.
-
http://blogs.microsoft.co.il/blogs/gilf/archive/2010/05/09/how-to-retrieve-stored-procedure-output-parameters-in-entity-framework.aspx
--
Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com -
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
-
-
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