Entity Framework - Trabalhando com o DbContext (Conceitos)
No artigo de hoje vamos rever conceitos importantes relacionados com classe DbContext do Entity Framework e aprender e entender como trabalhar melhor com ela. |
O Entity
Framework permite consultar, inserir, atualizar e excluir dados, usando objetos
CLR(Common Language Runtime) conhecidos como entidades; ele mapeia as
entidades e relacionamentos que são definidos no seu modelo para um banco de
dados e fornece facilidades para realizar as seguintes tarefas:
1- Materializar dados retornados do banco de dados como
objetos de entidade;
2- Controlar as alterações que foram feitas nos objetos;
3- Lidar com concorrência;
4- Propagar as alterações feitas nos objetos de volta ao banco de dados;
5- Vincular objetos a controles.
A principal classe responsável pela interação com os objetos de dados é a classe
System.Data.Entity.DbContext (muitas
vezes referida como o contexto).
Essa classe de contexto administra os objetos entidades durante o tempo de
execução, o que inclui preencher objetos com dados de um banco de dados,
controlar alterações, e persistir dados para o banco de dados.
Deu para perceber a importância dessa classe e como é importante entender como
gerenciar os seus recursos.
Definindo uma classe derivada de DbContext
A maneira
recomendada para trabalhar com o contexto é definir uma classe que deriva de
DbContext e expõe as propriedades de DbSet que representam as
coleções das entidades especificadas no contexto.
Se você estiver trabalhando com o Descritor EF (EF Designer), o contexto
será gerado para você. Se você estiver trabalhando com a abordagem Code-First,
você mesmo vai escrever o contexto.
using System.Data.Entity; namespace EF_DBContext_1
{
public class ProdutoContext : DbContext
{
public DbSet<Categoria> categorias { get; set; }
public DbSet<Produto> produtos { get; set; }
}
}
|
Imports System.Data.Entity
Public Class ProdutoContext
Inherits DbContext
Public Property categorias() As DbSet(Of Categoria)
Public Property produtos() As DbSet(Of Produto)
End Class
|
Uma vez que
você tenha um contexto, você iria consultar, adicionar (usando os métodos
Add ou Attach) ou remover (usando Remove) as entidades no
contexto através destas propriedades.
Acessar uma propriedade DbSet em um objeto de contexto representa uma
consulta inicial que retorna todas as entidades do tipo especificado.
Note que apenas o acesso a uma propriedade não irá executar a consulta. A
consulta é executada quando:
Tempo de vida
O tempo de vida do contexto começa quando a instância é criada e termina quando a instância ou é descartada ou removida pela coleta de lixo (garbage-collector).
Nota: Garbage Collector (Coletor de Lixo), é um recurso
responsável por liberar quantidades de memória que não se encontram mais
acessíveis em um programa.
Utilize a palavra reservada using, se você quiser que todos os recursos
que o contexto controla sejam descartados no final do bloco using.
Quando você usa a palavra reservada using, o compilador cria
automaticamente um bloco try/finally e realiza chamadas para liberar o
recurso (Dispose) no bloco finally.
using (var contexto = new ProdutoContext())
{
// Realiza o acesso aos dados usando o contexto
}
|
Using contexto = New ProdutoContext()
' Realiza o acesso aos dados usando o contexto
End Using
|
A seguir temos algumas diretrizes gerais que você pode considerar ao decidir sobre a vida do contexto.
Ao trabalhar com um contexto com uma execução longa considere o seguinte:
Conexões e Multithreading
Por padrão, o
contexto gerencia as conexões com o banco de dados. Assim, ele abre e fecha as
conexões conforme necessário. Por exemplo, o contexto abre uma conexão para
executar uma consulta e, em seguida, fecha a conexão quando todos os conjuntos
de resultados foram processados.
Há casos em que você quer ter mais controle sobre quando a conexão abre e fecha.
Por exemplo, ao trabalhar com o SQL Server Compact, abrir e fechar a
mesma conexão usa muito recurso. Você pode então gerenciar esse processo
manualmente usando a propriedade Connection.
Finalmente o contexto não é thread-safe.
Você ainda pode criar um aplicação multithreading, desde que uma
instância da mesma classe da entidade não seja controlada por vários contextos
ao mesmo tempo.
Para saber mais sobre o Entity Framework acompanhe o curso : Curso Básico - Entity Framework sem firulas - na seção de Cursos do site Macoratti.net.
Jesus lhes respondeu, e disse: A
minha doutrina não é minha, mas daquele que me enviou.
Se alguém quiser fazer a vontade dele, pela mesma doutrina conhecerá se ela
é de Deus, ou se eu falo de mim mesmo.
João 7:16,17
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: