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:


José Carlos Macoratti