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();
}