Curso Entity Framework – Usando Stored Procedures
Nesta aula, vou mostrar como podemos usar stored procedures com o Entity Framework.
Nesta aula, vou mostrar como podemos usar stored procedures com o Entity Framework (aula anterior).
O Entity Framework possui a habilidade de automaticamente construir nativamente comandos para o banco de dados↳Banco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data → baseado em suas consultas LINQ to Entities ou Entity SQL, bem como construir os comandos para incluir, atualizar ou deletar dados. No entanto, você pode querer sobrescrever esses passos e usar suas stores procedures pré-definidas.
Para isso, você pode usar storeds procedures para obter dados ou para incluir, atualizar e deletar registros de uma ou múltiplas tabelas.
As stored procedures e as user-defined functions (UDFs) no banco de dados são representadas como funções no Entity Framework (atualmente, o EF não possui nenhuma entidade para stored procedures no descritor EDM).
Vamos então incluir no banco de dados EscolaDB.mdf criado na aula 2 do curso.
Abra o banco de dados e clique com o botão direito sobre o item Stored Procedures e a seguir em New Stored Procedure.
Em seguida, o código abaixo que cria a stored procedure GetCursosPorAlunoId, que retorna os cursos pelo código do aluno:
A seguir, como já criamos o EDM nas aulas anteriores, temos que atualizar o nosso modelo de entidades incluindo a stored procedure que acabamos de criar no EDM.
Abra o EDM na solução EF6_EscolaDB e em seguida clique com o botão direito do mouse no interior do descritor e depois em Update Model from database.
No janela do assistente, marque o item Stored Procedures and Functions e clique no botão Finish.
Se visualizarmos o Model Browser, iremos visualizar a nossa stored procedure em Entity Types -> Complex Types:
Sempre que importamos uma stored procedure para o modelo, ele cria um novo tipo complexo com o nome: {nome_da_stored_procedure}_Result por padrão.
A stored procedure GetCursosPorAlunoId irá retornar os mesmos campos da entidade Curso.
Precisamos então atualizar o tipo de retorno da stored procedure para retornar um tipo da entidade Curso.
Abra o Model Browser e em Function Imports clique com o botão direito sobre GetCursosPorAlunoId e, a seguir, em Edit.
Clique no radiobutton Entities, selecione a entidade Curso e clique no botão OK:
Pronto! já podemos usar a nossa stored procedure.
Preparando o ambiente
Vamos usar a solução criada na aula 11 – Entity Framework – Consultas Projeção – EF6_EscolaDB – para testar o cenário da concorrência descrito acima.
Abra a solução EF6_EscolaDB e a seguir clique no menu FILE -> Add -> New Project.
Selecione a linguagem Visual C#↳C#68 conteúdosNovidades do C# 8.0: Default Interface MembersDev (Back & Front) · jun 2019C# 8.0 – Conheça suas novas funcionalidadesDev (Back & Front) · mai 2019Novidades do C# 8.0: Switch ExpressionsDev (Back & Front) · mar 2019Ver tudo em Dev (Back & Front) → e o template Console Application, e informe o nome EF6_StoredProcedure:
Para referenciar o EF no projeto incluído, no menu TOOLS clique em Nuget Package Manager -> Manage Nuget Packages for solution.
A seguir, clique em Installed packages e depois no botão Manage e marque o projeto que incluímos; a seguir, clique no botão OK.
Em seguida, inclua uma referência ao projeto EF6_EscolaDB e atualize também o arquivo App.Config com a string de conexão para a entidade:
... <connectionStrings> <add name="EscolaDBEntities" connectionString="metadata=res://*/EscolaDB.csdl|res://*/EscolaDB.ssdl|res://*/EscolaDB.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;initial catalog=EscolaDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /></connectionStrings> ...
Testando a Stored Procedure
A seguir, no método Main() do arquivo Program.cs, inclua o código abaixo:
using System;
using EF6_EscolaDB;
namespace EF6_StoredProcedure
{
class Program
{
static void Main(string[] args)
{
using (var context = new EscolaDBEntities())
{
var cursos = context.GetCursosPorAlunoId(2);
Console.WriteLine("Cursos do Aluno de código igual a 2 - Miriam ");
Console.WriteLine("------------------------------------------------");
foreach (Curso cs in cursos)
Console.WriteLine(cs.CursoNome);
Console.ReadKey();
}
}
}
}
Executando o projeto iremos obter o seguinte resultado
Na próxima aula, veremos como podemos usar stored procedures para fazer um CUD no Entity Framework.













