Tag: EntityFramework
08_EntityFramework e DatabaseFirst
O objectivo da EntityFramework é o de aumentar a produtividade do programador, reduzindo tarefas redundantes para persistência de dados
Existem várias forma de especificar o modelo de dados:
Database First (Bd -> classes de domínio)
CodeFirst (classes de dominio -> Bd)
ModelFirst (UML e surgem as classes de dominio via EF e a base de dados)
O contexto (Model.Contex.cs):
Contem a classe que deriva da classe DbContext
Fornece a propriedade para cada classe do modelo que corresponde a tabela da BD (Fornecedor.cs Cliente.cs)
Os modelos:
os modelos representam as tabelas da base de dados
quando pretendemos usar o “maldito” scaffolding, recorremos à classe de contexto e ao modelo de classes
o Linq e a EntityFramework:
o Lazy Loading: o loading não é executado de forma imediata, é apenas quando se acede aos elementos (bom apenas para aplicações desktop)
Problema do n+1 do lazy loading:
fazer uso de inlcude
Alternativa ao lazy loading, é o explicit loading:
útil quando se pretende efectuar o load de muitos objectos e as queries ficam complexas (as queries são separadas), mas faz muitas queries na base de dados
ou o Eager loading:
quando se obtém os dados da BD em apenas um round-trip e faz uso de joins
Como adicionar objectos na BD:
//v1 var aluno = new Aluno { Nome = "Pedro", UserName="pedro@residual.ptt", Email ="pedro@residual.pt", CursoId=1 }; db.Alunos.Add(aluno); db.SaveChanges();
ou
//v2 var cursos = db.Cursos.ToList(); var curso = db.Cursos.Single(c => c.CursoId == 1); var aluno = new Aluno { Nome = "Pedro", UserName="pedro@residual.pt", Email ="pedro@residual.pt", Curso = curso }; db.Alunos.Add(aluno); db.SaveChanges();
Como alterar objectos na BD:
var curso = db.Cursos.Find(4); // ou var curso = db.Cursos.Single(c => c.CursoId == 4); curso.Objectivos = "Curso bla bla bla"; curso.Nome = "Novo Nome"; db.SaveChanges();
Como remover objectos na BD:
//Com CascadeDelete ativo var curso = db.Cursos.Find(4); db.Cursos.Remove(curso); db.SaveChanges();
Ou
//Sem CascadeDelete ativo var curso = db.Cursos.Include(c => c.Alunos) .Single(c => c.CursoId == 4); db.Alunos.RemoveRange(curso.Alunos); db.Cursos.Remove(curso); db.SaveChanges();