RSS feed
Anunciando a biblioteca Entity Framework Code-First (lançamento da CTP5) - ScottGu's Blog em Português

Anunciando a biblioteca Entity Framework Code-First (lançamento da CTP5)


Esta semana, a equipe de dados lançou a CTP5 (em Inglês) da biblioteca Entity Framework Code-First (Código-Primeiro ou Codificação Antecipada). A opção Code-First ou Desenvolvimento Antecipado de Código do EF permite um fluxo de trabalho de desenvolvimento de código extremamente suave para trabalhar com dados. Esta opção de desenvolvimento te permite:
  • Desenvolver sem ter que abrir um designer ou definir um arquivo de mapeamento XML
  • Definir objetos do modelo, simplesmente escrevendo "classes padrão" do .NET, sem a necessidade de classes base
  • Usar uma abordagem de "convenção sobre configuração", que permite a persistência de dados sem configurar nada explicitamente
  • Opcionalmente, substituir a persistência baseada em convenção passando a usar uma API de código fluente para personalizar completamente o mapeamento da persistência

Sou um grande fã da abordagem Code-First do EF, e escrevi vários posts sobre ela neste verão:

O lançamento de hoje da nova CTP5 entrega diversas melhorias agradáveis que incrementam a CTP4, e será a última versão de amostra antes da versão final. Nós lançaremos a versão final da biblioteca EF Code First no primeiro trimestre do próximo ano (1º trimestre de 2011). Ela funciona com todos os tipos de aplicação .NET (incluindo projetos ASP.NET Web Forms e ASP.NET MVC).

Instalando a biblioteca EF Code First

Você pode instalar e usar a EF Code First CTP5 usando uma de duas maneiras:

Abordagem 1) Fazer o download e executar um programa de instalação. Uma vez instalada, você pode fazer referência ao assembly EntityFramework.dll dentro de seus projetos.

ou:

Abordagem 2) Usando o Gerenciador de Pacotes NuGet dentro do Visual Studio para fazer o download e instalar a EF Code First dentro de um projeto. Para fazer isso, basta abrir o Console do Gerenciador de Pacotes do NuGet dentro do Visual Studio (View->Other Windows->Package Manager Console) e digitar "Install-Package EFCodeFirst":

imagem

Ao digitar "Install-Package EFCodeFirst" dentro do Console do Gerenciador de Pacotes, o NuGet fará o download do pacote da EF Code First, e adicionará a biblioteca dentro do seu projeto atual:

imagem

Fazendo isso, será adicionada automaticamente uma referência para o assembly EntityFramework.dll no seu projeto:

imagem 

O NuGet permite que você tenha a EF Code First configurada e pronta para uso em poucos segundos. Quando a versão final da EF Code First for lançada, você também será capaz de digitar somente "Update-Package EFCodeFirst" para atualizar seus projetos existentes para usar a versão final.

Assembly e Namespace da EF Code First

O lançamento da EF Code First CTP5 tem um nome de assembly atualizado e novo namespace .NET:

  • Nome do Assembly: EntityFramework.dll
  • Namespace: System.Data.Entity

Estes nomes correspondem ao que pretendemos utilizar na versão final da biblioteca.

Novas Melhorias Legais da CTP5

O lançamento da nova CTP5 da EF Code First contém várias boas melhorias e aperfeiçoamentos. Alguns dos destaques incluem:

  • Melhor suporte para bancos de dados existentes
  • Suporte nativo para Validação no nível do modelo e para DataAnnotation
  • Melhorias para a Fluent API
  • Suporte a Convenções Plugáveis
  • Nova API para controle de alterações/mudanças (Change Tracking API)
  • Melhor Resolução de Conflitos de Concorrência
  • Suporte a Comandos/Pesquisas SQL puras (Raw)

O resto deste post contém alguns detalhes sobre algumas das alterações acima.

Melhor Suporte para Bancos de Dados Existentes

A EF Code First torna realmente fácil criar camadas do modelo que trabalham com bancos de dados existentes. A CTP5 inclui alguns refinamentos que simplificam ainda mais o fluxo de trabalho do desenvolvedor para este cenário.

A seguir estão os passos para usar a EF Code First para criar uma camada de modelo para o banco de dados de exemplo Northwind:

Passo 1: Criar as Classes do Modelo e uma classe DbContext

A seguir está todo o código necessário para implementar uma camada de modelo simples usando a EF Code First que usa o banco de dados Northwind:

imagem

A EF Code First permite a utilização de "POCO" - Objetos padrão da CLR - para representar as entidades dentro de um banco de dados. Isso significa que você não precisa derivar classes do modelo a partir de uma classe base, nem implementar nenhuma interface ou atributos de persistência de dados neles. Isso permite que as classes do modelo sejam mantidas limpas, facilmente testáveis, e "ignorantes quanto à persistência". As classes Product e Category acima são exemplos de classes POCO do modelo.

A EF Code First permite que você conecte facilmente suas classes POCO do modelo em um banco de dados através da criação de uma classe "DbContext" que expõe propriedades públicas que mapeiam para tabelas dentro de um banco de dados. A classe Northwind acima ilustra como isso pode ser feito. Ela está mapeando nossas classes Product e Category para as tabelas "Products" e "Categories" no banco de dados. As propriedades dentro das classes Product e Category por sua vez mapeiam para colunas nas tabelas Products e Categories - e cada instância de um objeto Product/Category mapeia para uma linha dentro das tabelas.

O código acima é todo o código necessário para criar nosso modelo e camada de acesso a dados! CTPs anteriores da EF Code First exigiam um passo adicional para funcionarem em bancos de dados existentes (uma chamada para Database.Initializer<Northwind>(null) para que a EF Code First não criasse o banco de dados) - este passo não é mais necessário com o lançamento da CTP5. 

Passo 2: Configurar a String de Conexão do Banco de Dados

Nós escrevemos todo o código que precisamos escrever para definir nossa camada do modelo. Nosso último passo antes de usá-la será configurar uma string de conexão que conecta a mesma em nosso banco de dados. Para isso vamos acrescentar uma string de conexão "Northwind" em nosso arquivo web.config (ou app.config para aplicações cliente) assim:

  <connectionStrings>
     
    <add name="Northwind"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\northwind.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />

  </connectionStrings>
A EF "code first" usa uma convenção onde classes DbContext por padrão buscam por uma string de conexão que tenha o mesmo nome da classe de contexto. Devido nossa classe DbContext ser chamada "Northwind", ela por padrão procurará por uma string de conexão "Northwind" para usar. Acima nossa string de conexão Northwind é configurada para usar um banco de dados SQL Express local (armazenado dentro do diretório \App_Data do nosso projeto). Você pode, alternativamente, apontar para um SQL Server remoto.

Passo 3: Usando nossa Camada do Modelo Northwind

Agora podemos facilmente consultar e atualizar nosso banco de dados usando a camada de modelo fortemente tipada que acabamos de construir com a EF Code First.

O exemplo de código a seguir demonstra como usar LINQ para consultar os produtos dentro de uma categoria de produtos específica. Esta consulta devolve uma sequência de objetos produto fortemente tipados que coincidem com os critérios da pesquisa:

imagem

O exemplo de código a seguir demonstra como podemos recuperar um objeto produto específico, atualizar duas de suas propriedades e, em seguida salvar as alterações de volta no banco de dados:

imagem

A EF Code First trata de todo o monitoramento de alterações e da persistência de dados para nós, e permite-nos concentrar em nossa aplicação e lógica do negócio ao invés de nos preocuparmos com a ligação de acesso aos dados.

Validação Nativa para o Modelo

A EF Code First permite que você utilize qualquer abordagem de validação que você quiser quando estiver implementando regras de negócio em sua camada do modelo. Isto permite uma grande flexibilidade e poder.

Começando com o lançamento da CTP5 desta semana, a EF Code First também inclui suporte nativo para validação com DataAnnotation e IValidatorObject no .NET 4. Isso permite que você facilmente implemente regras de validação nos seus modelos, e que essas regras sejam automaticamente aplicadas pela EF Code First sempre que você salvar sua camada do modelo. Ela fornece uma maneira muito conveniente "fora da caixa" para possibilitar a validação de dados em suas aplicações.

Aplicando DataAnnotations em nosso Modelo Northwind

O exemplo de código a seguir demonstra como poderíamos acrescentar algumas regras de validação declarativas em duas das propriedades do nosso modelo "Product":

imagem

Estamos usando os atributos [Required] (Obrigatório) e [Range] (Limite) acima. Esses atributos de validação residem dentro do namespace System.ComponentModel.DataAnnotations que é nativo no .NET 4, e que pode ser utilizado independentemente do EF. As mensagens de erro especificadas neles podem ser explicitamente definidas (como acima) - ou recuperadas de arquivos de recurso .resx (que torna fácil a localização de aplicações).

Imposição/Obrigatoriedade da Validação em SaveChanges()

A EF Code-First (começando com a CTP5) agora aplica e impõe automaticamente as regras de validação DataAnnotation quando um objeto do modelo é atualizado ou salvo. Você não precisará escrever qualquer código para fazer valer as regras - esse suporte agora é ativado por padrão.

Esse novo suporte significa que o código a seguir - o qual viola as nossas regras definidas acima - gerará automaticamente uma exceção quando chamarmos o método "SaveChanges()" em nosso DbContext Northwind:

imagem

A exceção DbEntityValidationException que é gerada quando SaveChanges() é chamado contém uma propriedade "EntityValidationErrors" que você pode usar para recuperar a lista de todos os erros de validação que ocorreram quando a modelo estava tentando salvar.  Isso permite que você facilmente oriente o usuário sobre como corrigir os erros. Note que a EF Code-First vai abortar a operação inteira de mudanças, se uma regra de validação for violada - garantindo assim que nosso banco de dados esteja sempre em um estado válido, consistente.

A imposição da validação da EF Code-First funciona tanto para atributos DataAnnotation nativos do .NET (como Required, Range, RegularExpression, StringLength, etc), bem como para qualquer regra de validação personalizada que você crie em sub-classes da classe base System.ComponentModel.DataAnnotations.ValidationAttribute.

Suporte para Validação na UI

Vários de nossos frameworks de UI no .NET também oferecem suporte para regras de validação baseadas em DataAnnotation. Por exemplo, ASP.NET MVC, ASP.NET Dynamic Data, e Silverlight (via WCF RIA Services) fornecem suporte para a exibição de validação de dados na UI no lado do cliente que respeitam as regras DataAnnotation aplicadas em objetos do modelo.

O screen-shot a seguir demonstra como usar o modelo "Add-View" padrão dentro de uma aplicação ASP.NET MVC 3 que fará com que mensagens de erro de validação apropriadas sejam exibidas se valores adequados não forem providos:

imagem

A ASP.NET MVC 3 suporta a obrigatoriedade destas validações tanto no lado do cliente como no lado do servidor. As mensagens de erro exibidas são automaticamente retornadas a partir dos atributos de validação declarativos - eliminando a necessidade de escrever qualquer código personalizado para exibí-las.

Mantendo as coisas DRY

O "princípio DRY" significa "Não Repita Você Mesmo", e é uma prática que recomenda que você evite a duplicação de lógica/configuração/código em vários locais de toda a sua aplicação e, ao invés disso especifique a lógica/configuração/código apenas uma vez aplicando-o em todos os lugares.

A CTP5 da EF Code-First agora permite que você aplique validações DataAnnotation declarativas em suas classes do modelo (especificando as mesmas uma única vez) e, então, a lógica de validação será imposta (e mensagens de erro correspondentes serão exibidas) em todos os cenários da aplicação - dentro de controladores, visões, e scripts no lado do cliente, e em qualquer código personalizado que atualiza e manipula as classes do modelo.

Isso torna muito mais fácil construir boas aplicações com código limpo - aplicações que podem iterar e evoluir rapidamente.

Outras melhorias da EF Code First Novas na CTP5

A CTP5 da EF Code First inclui um conjunto de outras melhorias também. A seguir estão algumas descrições curtas de algumas delas:

  • Melhorias da Fluent API

A EF Code First permite que você substitua um método "OnModelCreating()" na classe DbContext para refinar/substituir as regras de mapeamento do esquema usado para mapear classes do modelo para o esquema do banco de dados. A CTP5 inclui alguns refinamentos na classe ModelBuilder que é passada para este método que podem tornar a definição de regras de mapeamento mais limpa e concisa. A Equipe do ADO.NET escreveu alguns exemplos de como fazer isso aqui (em Inglês).

  • Suporte à Convenções Plugáveis

A CTP5 da EF Code First fornece um novo suporte que permite substituir as "convenções padrão" que a EF Code First honra, e, opcionalmente, te permite substituir as mesmas com seu próprio conjunto de convenções.

  • Nova API de Monitoramento de Alterações/Mudanças

A CTP5 da EF Code First expõe um novo conjunto de informações de monitoramento de alterações que permite que você acesse valores Originais, Correntes e Armazenados, e Estado (por exemplo Added (Adicionado), Unchanged (Inalterado), Modified (Modificado), Deleted (Deletado)). Este suporte é útil em uma variedade de cenários.

  • Melhoria para Resolução de Conflitos de Concorrência

A CTP5 da EF Code First oferece melhores mensagens de exceção que permitem acesso à instância do objeto afetado e a capacidade de resolver conflitos utilizando valores correntes, originais e do banco de dados. 

  • Suporte à Consultas e Comandos SQL Puros (Raw)

A CTP5 da EF Code First agora permite consultas e comandos SQL puros (incluindo Stored Procedures) de forma que estes sejam executados através dos métodos SqlQuery e SqlCommand expostos fora da propriedade DbContext.Database. Os resultados dessas chamadas aos métodos podem ser materializados em instâncias de objeto que podem ser opcionalmente controladas pelo monitoramento de alterações do DbContext. Isso é útil em uma variedade de cenários avançados.

  • Suporte Completo para Data Annotations

A CTP5 da EF Code First suporta agora todas as DataAnnotations padrão do .NET, e pode usá-las tanto para realizar a validação, bem como para criar automaticamente o esquema do banco de dados apropriado quando a EF Code First é usada em um cenário de criação de banco de dados. 

Resumo

A EF Code First provê uma maneira elegante e poderosa para trabalhar com dados. Eu realmente gosto dela porque ela é extremamente limpa e suporta as melhores práticas, permitindo também que as soluções sejam implementadas muito, muito rapidamente. A abordagem code-only (apenas código) da biblioteca significa que as camadas do modelo acabam sendo flexíveis e fáceis de personalizar.

O lançamento da CTP5 desta semana refina a biblioteca EF Code First e ajuda a garantir que ela será muito agradável quando for lançada no início do ano que vem. Eu recomendo usar o NuGet para instalar e testar a mesma hoje. Eu acho que você vai ser surpreendido ao perceber o quão incrível ela é.

Espero que ajude,

Scott

 

Texto traduzido do post original por Leniel Macaferi.

Published Wednesday, December 08, 2010 3:39 AM by Leniel Macaferi
Filed under: , , ,

Comments

# Twitter Trackbacks for Anunciando a biblioteca Entity Framework Code-First (lan??amento da CTP5) - ScottGu's Blog em Portugu??s [asp.net] on Topsy.com

Pingback from  Twitter Trackbacks for                 Anunciando a biblioteca Entity Framework Code-First (lan??amento da CTP5) - ScottGu's Blog em Portugu??s         [asp.net]        on Topsy.com

# Validação do Modelo no Nível das Classes com a EF Code First e ASP.NET MVC 3

Saturday, December 18, 2010 8:41 PM by ScottGu's Blog em Português

No início desta semana, a equipe de dados lançou a CTP5 da nova biblioteca Entity Framework Code-First

# Visual Studio 2010 Service Pack 1 (VS 2010 SP1) e SQL Compact Edition (SQL CE)

Saturday, February 05, 2011 7:51 PM by ScottGu's Blog em Português

Mês passado, nós lançamos (em Inglês) a versão Beta do VS 2010 Service Pack 1 (SP1). Você pode aprender

# Atualização das Ferramentas da ASP.NET MVC 3

Wednesday, May 04, 2011 9:25 PM by ScottGu's Blog em Português

Três semanas atrás nós tivemos nossa conferência MIX 2011 em Las Vegas. MIX é um dos meus eventos favoritos

# EF Code First e Geração Automática de Código (Data Scaffolding) com a Atualização das Ferramentas da ASP.NET MVC 3

Monday, May 30, 2011 12:22 AM by ScottGu's Blog em Português

No começo dessa semana eu escrevi sobre a nova Atualização das Ferramentas da ASP.NET MVC 3 que nós lançamos

# Ligação do Modelo de Dados com Web Forms - Parte 3: Atualização e Validação dos Dados (Série de posts sobre a ASP.NET 4.5)

Tuesday, November 01, 2011 11:24 AM by ScottGu's Blog em Português

Este é o quinto post de uma série de posts que estou escrevendo sobre a ASP.NET 4.5. Os próximos lançamentos

Leave a Comment

(required) 
(required) 
(optional)
(required)