Back-End

18 set, 2015

Curso Entity Framework – Os tipos de entidades

Publicidade

Havia quatro tipos de entidades no Entity Framework 4.x:

  1. EntityObject
  2. POCO
  3. POCO Proxy (proxy dnamic)
  4. Entidades Self-Tracking

A partir do Entity Framework 5.0, as entidades usadas são POCO e proxy dinâmico. As entidades do tipo EntityObject costumavam ser usadas com o ObjectContext, que não está sendo mais usado a partir do Entity Framework 5.0. Além disso, não é recomendado o uso de entidades Self-Tracking ou de automonitoramento.

1 – POCO (Plain Old CLR Object)

Uma classe POCO não depende de qualquer classe base específica do framework. É como qualquer outra classe normal, sendo por isso chamada de “Objetos Plain Old CLR”.

Essas entidades POCO (também conhecidas como objetos de persistência-ignorante) suportam o mesmo comportamento para consulta, inserção, atualização e exclusão como os tipos de entidades que são gerados pelo Modelo de Dados de Entidade. A seguir, temos uma classe Aluno POCO:

Nota: A Persistence Ignorance significa que podemos definir uma camada de domínio que contém entidades que são independentes do mecanismo de persistência usado.

 Public Class Aluno

    Public Property AlunoId As Integer
    Public Property AlunoNome As String
    Public Property Idade As Integer

End Class

2 – Dinamyc Proxy (POCO Proxy)

Um Proxy dinâmico é uma classe proxy em tempo de execução de uma entidade POCO. Uma entidade POCO torna-se uma entidade POCO Proxy se ela atende aos requisitos determinados para permitir o lazy loading (carregamento tardio) e o controle de alterações automático. Isso adiciona alguns métodos em tempo de execução à sua classe POCO que faz o controle de alterações instantâneas e o carregamento tardio.

Lazy Loading – é o mecanismo utilizado pelos frameworks de persistência para carregar informações sob demanda. Esse mecanismo torna as entidades mais leves, pois suas associações são carregadas apenas no momento em que o método que disponibiliza o dado associativo é chamado. Assim, quando objetos são retornados por uma consulta, os objetos relacionados não são carregados ao mesmo tempo; em vez disso, eles são carregados automaticamente quando a propriedade de navegação for acessada.

Uma entidade POCO devem atender aos seguintes requisitos para se tornar um POCO proxy:

  • A classe de dados personalizada deve ser declarada com acesso público.
  • A classe de dados personalizada não deve ser selada (NotInheritable em Visual Basic).
  • A classe de dados personalizada não deve ser abstrata (MustInherit noem Visual Basic).
  • A Opção ProxyCreationEnabled não deve ser definida como false (o padrão é true) na classe de contexto.
  • Cada propriedade de navegação deve ser declarada como público e virtual.

Por padrão, o proxy dinâmico está habilitado para cada entidade. No entanto, você pode desabilitar o proxy dinâmico, definindo a opção ProxyCreationEnabled para false na classe de contexto:

Exemplo: context.Configuration.ProxyCreationEnabled = False

O Entity Data Model gera entidades POCO que satisfazem à exigência acima para o proxy dinâmico por padrão.

Abaixo vemos a classe POCO Aluno gerada pelo EDM:

Partial Public Class Aluno
    Public Property AlunoId As Integer
    Public Property AlunoNome As String
    Public Property PadraoId As Integer
    Public Property RowVersion As Byte()

    Public Overridable Property Padrao As Padrao
    Public Overridable Property AlunoEndereco As AlunoEndereco
    Public Overridable Property Cursos As ICollection(Of Curso) = New HashSet(Of Curso)

End Class

Uma Entidade pode ter dois tipos de propriedades – as escalares e as de navegação.

 

entity-1

  • Propriedades escalares são aquelas cujos valores reais estão contidos na entidade. Por exemplo, uma entidade Aluno tem propriedades escalares como AlunoId e AlunoNome. Estes correspondem às colunas da tabela Aluno.
  • Propriedades de navegação são ponteiros para outras entidades relacionadas. O aluno tem a propriedade Padrao como propriedade de navegação que permitirá à aplicação navegar de um Aluno para a entidade relacionada.

Propriedades das entidades

Cada entidade e cada associação de um EDM , bem como o próprio modelo, possui propriedades. Vamos alterar algumas propriedades da entidade Aluno do modelo EscolaDBModel.

Primeiro, vamos selecionar a entidade para ver as suas propriedades na janela de propriedades.

Na janela de propriedades (figura abaixo), podemos ver que a entidade possui o nome Aluno tomado diretamente da tabela no banco de dados.

entity-framework

Observe também que ela possui uma propriedade chamada Entity Set Name.

Um Entity Set é um container para uma coleção de entidades de um tipo único. Por isso, a entity set chamada Alunos contém uma coleção de entidades Aluno.

Os nomes foram gerados pelo assistente, e ele não tem a habilidade de automaticamente colocar os nomes no plural ou singular quando for mais apropriado. No nosso caso, como ele tomou o nome das tabelas que já estão no plural, não será necessário fazer ajustes.

Poderíamos alterar o nome das propriedades para o modelo fazer mais sentido quando for o caso.

As propriedades de navegação (Proprieties Navigation) também possuem o nome adotado das suas entidades associadas.

A entidade Curso possui duas propriedades de navegação para representar a associação para com as entidades Professor e Alunos.

antity-framework-1

Na próxima aula, vamos ver como podemos consultar o modelo de entidades.