Início > Ado.Net > Série EF : Utilizando POCO separação das entidades do Contexto (Parte 1)

Série EF : Utilizando POCO separação das entidades do Contexto (Parte 1)

21 de agosto de 2011 Deixe um comentário Go to comments

Neste mês irei lançar aqui no Blog uma série de artigos falando sobre o Entity Framework, eu já havia falado sobre ele em alguns post´s anteriores. No entanto irei focar agora em soluções para o .net Framework 4.0, abaixo uma visão dos tópicos que irei abordar:

Utilizando POCO
CRUD Genérico
Como melhorar a performance do EF
WCF Data Services com EF

Para iniciar nossa série, segue o primeiro artigo onde irei falar sobre como utilizar POCO com EF, para elaboração dos artigos criei um banco de dados simples com duas tabelas, sendo Aluno e Professor.

Estrutura do banco de dados para exemplo

Conforme mencionado acima, para acompanhar este e os próximos exemplos é necessário possuir esta estrutura de banco de dados, pois será em cima desta que iremos fazer os códigos e mapeamentos. O banco de dados contem duas tabelas, sendo Professor e Aluno, veja abaixo:

1 bdoverview

Caso queira criar esta estrutura, segue o script que esta apontando para uma base de teste chamada “ArtigoEFBlog” (fique a vontade para mudar o nome).

— ————————————————–

— Entity Designer DDL Script for SQL Server 2005, 2008, and Azure
— ————————————————–— Date Created: 08/08/2011 11:41:21
— Generated from EDMX file–
————————————————–
 

SETQUOTED_IDENTIFIEROFF;
GO
USE[ArtigoEFBlog];
GO
IFSCHEMA_ID(N’dbo’)ISNULLEXECUTE(N’CREATE SCHEMA [dbo]’);
GO
— ————————————————–
— Dropping existing FOREIGN KEY constraints
— ————————————————–

IFOBJECT_ID(N'[dbo].[FK_Aluno_Professor]’,‘F’)ISNOTNULL

    ALTERTABLE[dbo].[Aluno]DROPCONSTRAINT[FK_Aluno_Professor];
GO
— ————————————————–— Dropping existing tables
— ————————————————–

IFOBJECT_ID(N'[dbo].[Aluno]’,‘U’)ISNOTNULL
    DROPTABLE[dbo].[Aluno];
GO
IFOBJECT_ID(N'[dbo].[Professor]’,‘U’)ISNOTNUL
DROPTABLE[dbo].[Professor];
GO
— ————————————————–— Creating all tables
— ————————————————–
— Creating table ‘Aluno’

CREATETABLE[dbo].[Aluno](
    [Id]int  NOTNULL,
    [Nome]nchar(10)  NOTNULL,
    [IdProfessor]int  NOTNULL
);
GO 

— Creating table ‘Professor’
CREATETABLE[dbo].[Professor](
    [Id]int  NOTNULL,
    [Nome]varchar(100)  NOTNULL
);
GO
—————————————————-
— Creating all PRIMARY KEY constraints
— ————————————————–

— Creating primary key on [Id] in table ‘Aluno’
ALTERTABLE[dbo].[Aluno]
ADDCONSTRAINT[PK_Aluno]
    PRIMARYKEYCLUSTERED ([Id]ASC);
GO 

— Creating primary key on [Id] in table ‘Professor’
ALTERTABLE[dbo].[Professor]
ADDCONSTRAINT[PK_Professor]
    PRIMARYKEYCLUSTERED ([Id]ASC);
GO
— ————————————————–
— Creating all FOREIGN KEY constraints
— ————————————————–— Creating foreign key on [IdProfessor] in table ‘Aluno’

ALTERTABLE[dbo].[Aluno]
ADDCONSTRAINT[FK_Aluno_Professor]
    FOREIGNKEY ([IdProfessor])
    REFERENCES[dbo].[Professor]
        ([Id])
    ONDELETENOACTIONONUPDATENOACTION;

— Creating non-clustered index for FOREIGN KEY ‘FK_Aluno_Professor’

CREATEINDEX[IX_FK_Aluno_Professor]
ON[dbo].[Aluno]
    ([IdProfessor]);
GO

— ————————————————–
— Script has ended
— ————————————————–

Obs.: Eu gerei este script através da própria opção do EF, para fazer isso acesse seu modelo (.edmx) clique com o botão direito em alguma área em branco e escolha a opção Generate Database from Model, posteriormente siga o wizard, esta opção se deve ao modo de Model-First na versão 4.0.

Introdução

O que é POCO?
POCO é o acrônimo de Plain Old CLR Object, e esta “técnica” se deriva do POJO, 0ambas permitem que você escreva sua própria classe de entidade de forma ignorante a persistência de dados, ou seja, você cria sua classe sem nenhuma herança ou implementação de contrato de dados (objetos chamados de entidades simples), e esta classe é utilizada em ferramentas ORM para persistir os dados em um repositório.

Em resumo o que iremos fazer neste exemplo é criar um projeto chamado entidades, onde este irá conter todas nossas classes de entidades (PESSOA e PROFESSOR) e em outro projeto vamos criar a infra para persistência usando uma ferramenta ORM (Entity Framework), ela receberá as nossas entidades e deverá persistir as mesmas em um banco de dados SQL Server. A ideia do artigo é mostrar como é simples usar o POCO para separar fisicamente as funcionalidades da solução.

Existe duas formas de se trabalahar com POCO & Entity Framework, a forma com e sem Proxy, abaixo entenderemos ambas.

Criando a Solução

Para nosso exemplo utilizaremos uma solução do Visual Studio contendo três projetos, sendo eles:

Nome Tipo projeto Descrição
NBSampleEF Console Application Projeto Front-End.
NBSampleEF.DAL Class Library Projeto que irá conter o ObjectContext, responsável por persistir os objetos no banco de dados.
NBSampleEF.Entities Class Library Projeto que irá conter as entidades de nossa solução.


Criando as entidades

Abra o projeto NBSampleEF.Entities e crie duas classes para representar nossas entidades, importante que quando usamos o POCO temos algumas restrições, veja algumas delas:

  • O Nome da classe precisa ser o mesmo nome da entidade no EDM.
  • O Nome e os tipos das propriedades da classe precisam ser iguais aos da entidade no EDM.
    Abaixo o código das classes de entidades:
Entidade Aluno

namespace NBSampleEF.Entities
{
    publicclassAluno
    {
        publicint Id { get; set; }
        publicstring Nome { get; set; }
        publicint IdProfessor { get; set; }
        publicProfessor Professor { get; set; }
    }
}

Entidade Professor

using System.Collections.Generic;
namespace NBSampleEF.Entities
{
    publicclassProfessor
    {
        publicint Id { get; set; }
        publicstring Nome { get; set; }
        publicList<Aluno> Aluno { get; set; }
    }
}

Criando a estrutura de persistência de dados

No projeto NBSampleEF.DAL referencie o projeto de entidades através do Add-> References -> NBSample.Entities, posteriormente crie um arquivo do tipo Entity Data Model (.edmx) apontando para seu banco de dados, de o nome do .edmx como ArtigosEFSample. Seu projeto deverá ficar conforme a imagem abaixo:

2 overviewEFDALproject

Nota: Se você expandir o arquivo .edmx, irá ver que
existe um arquivo abaixo dele chamado ArtigosEFSample.Designer.cs este
arquivo contem as classes do
ObjectContext e as classes de
entidades mapeadas.

No solution explorer clique com o botão direito ArtigosEFSample.edmx e escolha a opção propriedades (F4). Na tela de propriedades limpe o conteúdo do Custom Tool (propriedade responsável por gerar os códigos automaticamente). Compile a aplicação e verá que nenhum arquivo de designer do ArtigosEFSample.edmx será gerado.

Com isso definimos a estrutura de acesso a dados sem gerar as entidades automaticamente, no entanto, agora se faz necessário criarmos uma classe de persistência de dados, para isso, crie uma nova classe chamada ArtigoObjectContext . Herde a ArtigoObjectContext da classe ObjectContext e modifique o construtor Default, conforme exemplo abaixo:

using System.Data.Objects;
namespace NBSampleEF.DAL
{
    classArtigoObjectContext : ObjectContext
    {
        public ArtigoObjectContext()
            : base(“name=ArtigoEFBlogEntities”, “ArtigoEFBlogEntities”)
        {        }
    }
}

Nota: Note que estamos herdando no construtor default o construtor da classe base, e neste passamos a connectionstring chamada artigoEFBlogEntities que se encontra no arquivo app.config. Este arquivo foi criado junto com a parametrização do Modelo.

Na próxima parte criaremos os objectSet para cada uma das entidades, isso irá facilitar a navegação dos objetos e a persistencia do mesmo no repositório.

Até a próxima,

Nelson Borges

Categorias:Ado.Net
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: