Entity Framework - Operações de banco de dados

Nos capítulos anteriores, você aprendeu três maneiras diferentes de definir um modelo de dados de entidade.

  • Dois deles, o Database First e o Model First, dependiam do designer do Entity Framework combinado com a geração de código.

  • O terceiro, Code First, permite que você ignore um designer visual e apenas escreva seu próprio código.

  • Independentemente do caminho que você escolher, você acabará com classes de domínio e uma ou mais classes DbContext do Entity Framework permitem que você recupere e mantenha dados relevantes para essas classes.

A API DbContext em seus aplicativos é usada como uma ponte entre suas classes e seu banco de dados. O DbContext é uma das classes mais importantes do Entity Framework.

  • Ele permite expressar e executar consultas.

  • Ele pega os resultados da consulta do banco de dados e os transforma em instâncias de nossas classes de modelo.

  • Ele pode acompanhar as alterações nas entidades, incluindo adição e exclusão, e então dispara a criação de instruções de inserção, atualização e exclusão que são enviadas ao banco de dados sob demanda.

A seguir estão as classes de contexto de anúncio de domínio nas quais realizaremos diferentes operações neste capítulo. Este é o mesmo exemplo que criamos no capítulo, Database First Approach.

Implementação de classe de contexto

using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Core.Objects;
using System.Linq;

namespace DatabaseFirstDemo {

   public partial class UniContextEntities : DbContext {

      public UniContextEntities(): base("name = UniContextEntities") {}

      protected override void OnModelCreating(DbModelBuilder modelBuilder) {
         throw new UnintentionalCodeFirstException();
      }

      public virtual DbSet<Course> Courses { get; set; }
      public virtual DbSet<Enrollment> Enrollments { get; set; }
      public virtual DbSet<Student> Students { get; set; }
   }
}

Implementação de classes de domínio

Aula do curso

namespace DatabaseFirstDemo {

   using System;
   using System.Collections.Generic;
	
   public partial class Course {

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2214:DoNotCallOverridableMethodsInConstructors")]

      public Course() {
         this.Enrollments = new HashSet<Enrollment>();
      }
	
      public int CourseID { get; set; }
      public string Title { get; set; }
      public int Credits { get; set; }
	
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2227:CollectionPropertiesShouldBeReadOnly")]
			
      public virtual ICollection<Enrollment> Enrollments { get; set; }
   }
}

Aula de estudante

namespace DatabaseFirstDemo {

   using System;
   using System.Collections.Generic; 

   public partial class Student {

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2214:DoNotCallOverridableMethodsInConstructors")]

      public Student() {
         this.Enrollments = new HashSet<Enrollment>();
      }

      public int ID { get; set; }
      public string LastName { get; set; }
      public string FirstMidName { get; set; }
      public System.DateTime EnrollmentDate { get; set; }

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2227:CollectionPropertiesShouldBeReadOnly")]
			
      public virtual ICollection<Enrollment> Enrollments { get; set; }
   }
}

Aula de matrícula

namespace DatabaseFirstDemo {

   using System;
   using System.Collections.Generic; 

   public partial class Enrollment {

      public int EnrollmentID { get; set; }
      public int CourseID { get; set; }
      public int StudentID { get; set; }
      public Nullable<int> Grade { get; set; }
		
      public virtual Course Course { get; set; }
      public virtual Student Student { get; set; }
   }
}

Criar operação

Adicionar um novo objeto com o Entity Framework é tão simples quanto construir uma nova instância do seu objeto e registrá-lo usando o método Add em DbSet. O código a seguir permite adicionar um novo aluno ao banco de dados.

class Program {

   static void Main(string[] args) {

      var newStudent = new Student();

      //set student name

      newStudent.FirstMidName = "Bill";
      newStudent.LastName = "Gates";
      newStudent.EnrollmentDate = DateTime.Parse("2015-10-21");
      newStudent.ID = 100;

      //create DBContext object

      using (var dbCtx = new UniContextEntities()) {

         //Add Student object into Students DBset
         dbCtx.Students.Add(newStudent);

         // call SaveChanges method to save student into database
         dbCtx.SaveChanges();
      }
   }
}

Operação de atualização

Alterar objetos existentes é tão simples quanto atualizar o valor atribuído às propriedades que você deseja alterar e chamar SaveChanges. Por exemplo, o código a seguir é usado para alterar o sobrenome de Ali de Khan para Aslam.

using (var context = new UniContextEntities()) {

   var student = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
   student.LastName = "Aslam";
   context.SaveChanges();
}

Excluir operação

Para excluir uma entidade usando o Entity Framework, você usa o método Remove em DbSet. Remova obras para entidades existentes e recém-adicionadas. Chamar Remove em uma entidade que foi adicionada, mas ainda não salva no banco de dados, cancelará a adição da entidade. A entidade é removida do rastreador de alterações e não é mais rastreada pelo DbContext. Chamar Remove em uma entidade existente que está sendo controlada por alterações registrará a entidade para exclusão na próxima vez que SaveChanges for chamado. O exemplo a seguir é de um código em que o aluno é removido do banco de dados cujo primeiro nome é Ali.

using (var context = new UniContextEntities()) {
   var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
   context.Students.Remove(bay);
   context.SaveChanges();
}

Leia a operação

Ler os dados existentes do banco de dados é muito simples. A seguir está o código no qual todos os dados da tabela do aluno são recuperados e, em seguida, um programa será exibido com o nome e o sobrenome dos alunos em ordem alfabética.

using (var db = new UniContextEntities()) {

   var query = from b in db.Students orderby b.FirstMidName select b;
   Console.WriteLine("All All student in the database:");

   foreach (var item in query) {
      Console.WriteLine(item.FirstMidName +" "+ item.LastName);
   }

   Console.WriteLine("Press any key to exit...");
   Console.ReadKey();
}