Entity Framework - procedimentos armazenados
O Entity Framework permite que você use procedimentos armazenados no Entity Data Model em vez de, ou em combinação com, sua geração automática de comando.
- Você pode usar procedimentos armazenados para executar lógica predefinida em tabelas de banco de dados, e muitas organizações têm políticas em vigor que exigem o uso desses procedimentos armazenados. 
- Ele também pode especificar que EF deve usar seus procedimentos armazenados para inserir, atualizar ou excluir entidades. 
- Embora os comandos construídos dinamicamente sejam seguros, eficientes e geralmente tão bons ou melhores do que aqueles que você mesmo escreve, há muitos casos em que já existem procedimentos armazenados e as práticas da sua empresa podem restringir o uso direto das tabelas. 
- Como alternativa, você pode apenas desejar ter controle explícito sobre o que é executado na loja e preferir criar procedimentos armazenados. 
O exemplo a seguir cria um novo projeto em Arquivo → Novo → Projeto.
 
                Step 1 - Selecione o aplicativo de console no painel do meio e insira StoredProceduresDemo no campo de nome.
Step 2 - No explorador de servidores, clique com o botão direito em seu banco de dados.
Step 3 - Selecione Nova consulta e insira o código a seguir no editor T-SQL para adicionar uma nova tabela em seu banco de dados.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U'))
BEGIN
   CREATE TABLE [dbo].[StudentGrade](
      [EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
      [CourseID] [int] NOT NULL,
      [StudentID] [int] NOT NULL,
      [Grade] [decimal](3, 2) NULL,
      CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED (
         [EnrollmentID] ASC
      )
      WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
   ) ON [PRIMARY]
END
GOStep 4 - Clique com o botão direito no editor e selecione Executar.
 
                Step 5- Clique com o botão direito em seu banco de dados e clique em atualizar. Você verá a tabela recém-adicionada em seu banco de dados.
Step 6 - No Server explorer, clique com o botão direito do mouse em seu banco de dados novamente.
 
                Step 7 - Selecione Nova Consulta e digite o seguinte código no editor T-SQL para adicionar um procedimento armazenado em seu banco de dados, que retornará as notas dos Alunos.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[GetStudentGrades]') AND type in (N'P', N'PC'))
BEGIN
   EXEC dbo.sp_executesql @statement = N'
   CREATE PROCEDURE [dbo].[GetStudentGrades]
   @StudentID int
   AS
   SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade 
   WHERE StudentID = @StudentID
   '
END
GOStep 8 - Clique com o botão direito no editor e selecione Executar.
 
                Step 9- Clique com o botão direito em seu banco de dados e clique em atualizar. Você verá que um procedimento armazenado é criado em seu banco de dados.
 
                Step 10 - Clique com o botão direito do mouse no nome do projeto no Solution Explorer e selecione Add → New Item.
Step 11 - Em seguida, selecione ADO.NET Entity Data Model no painel Templates.
 
                Step 12 - Insira SPModel como nome e clique em Adicionar.
Step 13 - Na caixa de diálogo Choose Model Contents, selecione EF designer do banco de dados e clique em Next.
 
                Step 14 - Selecione seu banco de dados e clique em Avançar.
 
                Step 15 - Na caixa de diálogo Choose Your Database Objects, clique em tables, views.
 
                Step 16 - Selecione a função GetStudentGradesForCourse localizada no nó Stored Procedures and Functions e clique em Concluir.
Step 17 - Selecione Exibir → Outras janelas → Navegador de modelo de dados de entidade e clique com o botão direito em GetStudentGrades em Importações de funções e selecione Editar.
 
                Isso produzirá o seguinte diálogo.
 
                Step 18 - Clique no botão de rádio Entities e selecione StudentGrade na combobox como tipo de retorno deste procedimento armazenado e clique em Ok.
Vamos dar uma olhada no código C # a seguir, no qual todas as notas serão recuperadas passando a ID do aluno como parâmetro no procedimento armazenado GetStudentGrades.
class Program {
   static void Main(string[] args) {
      using (var context = new UniContextEntities()) {
         int studentID = 22;
         var studentGrades = context.GetStudentGrades(studentID);
         foreach (var student in studentGrades) {
            Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ", 
               student.CourseID, student.Course.Title, student.Grade);
         }
         Console.ReadKey();
      }
   }
}Quando o código acima for compilado e executado, você receberá a seguinte saída -
Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50Recomendamos que você execute o exemplo acima passo a passo para melhor compreensão.