Contents tagged with LINQ

  • RC do Entity Framework 4.1 (inclui a biblioteca EF Code First)


    Semana passada, a equipe de dados entregou a versão RC - Release Candidate (Candidata a Lançamento) do Entity Framework 4.1. Você pode saber mais sobre esta versão e fazer o download aqui (em Inglês).

    O EF 4.1 inclui a nova opção para desenvolvimento de código chamada "EF Code First", sobre a qual escrevi várias vezes no passado. A biblioteca EF Code First fornece uma maneira muito elegante e limpa para se trabalhar com dados, e permite que você faça isso sem a necessidade de um designer ou arquivo XML de mapeamento. A seguir estão links para alguns tutoriais que escrevi no passado sobre o assunto:

    Os tutoriais acima foram escritos tendo como base o lançamento da CTP4 da biblioteca EF Code First (assim, algumas APIs podem estar um pouco diferentes), mas os conceitos e situações descritas nos tutoriais permanecem inalterados.

    Licença Go Live

    O EF 4.1 da semana passada vem com uma licença "Go Live" que te permite usá-lo em ambientes de produção. A versão final do EF 4.1 será lançada dentro das próximas quatro semanas e será 100% compatível com a API da versão RC.

    Melhorias que chegam com a versão RC

    A RC inclui várias melhorias e aprimoramentos. A equipe do EF tem um bom post resumindo as alterações da RC (em Inglês). Scott Hanselman também tem um bom vídeo de entrevista com a equipe de dados (em Inglês) que fala mais sobre o lançamento.

    Uma das minhas melhorias favoritas introduzidas com a versão RC da semana passada é o suporte para segurança medium trust (segurança média). Isso permite que você use o EF 4.1 (e a biblioteca EF Code First) em ambientes de hospedagem web compartilhados de baixo custo - sem precisar que o serviço de hospedagem (hoster) instale qualquer coisa para usá-lo.

    O EF 4.1 também suporta agora validação não só com os cenários code-first, mas também permite a validação dos dados em fluxos de trabalho model-first (modelo de dados em primeiro lugar) e database-first (banco de dados em primeiro lugar). 

    Atualizando a partir de versões anteriores

    A versão RC inclui alguns ajustes e mudanças na API tendo como base as CTPs anteriores. Leia as notas de lançamento que acompanham o lançamento da RC para obter uma lista mais detalhada das mudanças.

    John Papa também tem um excelente post sobre como atualizar para o EF 4.1 (em Inglês), o qual descreve os passos que ele seguiu quando fez a atualização de um projeto grande que ele escreveu usando o lançamento da CTP5 anterior. O trabalho para atualizar é bastante simples e fácil - use seu post como um guia sobre como atualizar rapidamente seus próprios projetos.

    Novo nome para o Pacote do NuGet

    Uma das mudanças que a equipe de dados fez entre as versões CTP5 e RC foi renomear o nome do pacote do NuGet de "EFCodeFirst" para "EntityFramework". Eles decidiram fazer esta mudança porque a versão 4.1 EF agora inclui várias adições além de apenas uma abordagem code-first.

    Se você já tiver instalado o pacoted NuGet "EFCodeFirst", você irá querer desinstalá-lo para depois instalar o novo pacote NuGet "EntityFramework". O post do John Papa detalha os passos exatos de como fazer isso (só leva aproximadamente 20 segundos para fazer isso).

    Mais Tutoriais sobre EF

    Julie Lerman criou alguns whitepapers (guias) muito bons para a MSDN que mostram como usar o conjunto de recursos do EF4 e EF 4.1.

    Clique aqui para encontrar links para ler e assistir os guias (em Inglês).

    Sumário

    Estou realmente animado com o lançamento da versão 4.1 do EF que será entregue no próximo mês. Essa versão melhora significativamente o Entity Framework, e torna ainda mais fácil e limpo trabalhar com dados dentro do .NET. 

    Você pode tirar proveito do EF dentro de todos os projetos ASP.NET (incluindo ambos Web Forms e MVC), dentro de projetos cliente usando Windows Forms e WPF, e dentro de outros tipos de projeto como WCF, Console e Services. Você pode usar o gerenciador de pacotes NuGet para instalá-lo facilmente dentro de todos estes tipos de projeto.

    Espero que ajude,

    Scott

    PS: Eu também estou agora utilizando o Twitter para atualizações rápidas e para compartilhar links. Siga-me em: twitter.com/ScottGu

     

    Texto traduzido do post original por Leniel Macaferi.

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

    Mês passado, nós lançamos (em Inglês) a versão Beta do VS 2010 Service Pack 1 (SP1). Você pode aprender mais sobre o VS 2010 SP1 Beta a partir dos dois posts (em Inglês) de Jason Zander e a partir do post de Scott Hanselman (em Inglês) que cobre algumas das novas capacidades habilitadas com ele. Você pode baixar e instalar o VS 2010 SP1 Beta aqui.

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


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

    No meu post há alguns dias atrás eu falei sobre algumas das melhorias introduzidas com o novo lançamento da CTP5. Suporte automático para fazer valer atributos de validação DataAnnotation em modelos foi uma das melhorias que discuti. Isto fornece uma maneira muito fácil para habilitar lógica de validação no nível da propriedade dentro da sua camada do modelo.

    Você pode aplicar atributos de validação como [Required] (Obrigatório), [Range] (Limite) e [RegularExpression] (Expressão Regularar) - todos estes atributos estão incluídos no .NET 4 - em suas classes do modelo, a fim de ter certeza de que as propriedades do modelo estão em um estado válido antes de serem persistidas/salvas em um banco de dados. Você também pode criar seus próprios atributos de validação personalizados (como este validador [CreditCard] (Cartão de Crédito) muito legal - em Inglês) e fazê-los valer automaticamente através da EF Code First. Isso fornece uma maneira muito fácil para validar os valores das propriedades dos seus modelos. Mostrei alguns exemplos de código sobre esse recurso em ação no meu post anterior.

    Validação do Modelo no Nível das Classes usando IValidatableObject

    Atributos DataAnnotation fornecem uma maneira fácil para validar valores individuais de propriedades em suas classes do modelo. 

    Várias pessoas têm perguntado - "A EF Code First também suporta uma forma de implementar métodos de validação no nível das classes em objetos do modelo, para regras de validação que precisam usar vários valores de propriedades"? Ela suporta - e uma maneira fácil de usar isso é implementando a interface IValidatableObject em suas classes do modelo.

    Método IValidatableObject.Validate()

    A seguir está um exemplo de como usar a interface IValidatableObject (que é nativa no .NET 4 dentro do namespace System.ComponentModel.DataAnnotations) para implementar duas regras de validação personalizadas em uma classe Product do modelo. As duas regras garantem que:

    • Novas unidades do produto não podem ser compradas se o produto está em um estado de venda descontinuada
    • Novas unidades do produto não podem ser compradas se existirem mais de 100 unidades no estoque

    Vamos aplicar estas regras de negócio através da implementação da interface IValidatableObject na nossa classe de produto, implementando seu método Validate() assim:

    imagem

    O método IValidatableObject.Validate() pode aplicar regras de validação que abrangem várias propriedades, e pode retornar múltiplos erros de validação. Cada ValidationResult (Resultado de Validação) retornado pode fornecer tanto uma mensagem de erro, bem como uma lista opcional de nomes de propriedades que causaram a violação (o que é útil ao exibir mensagens de erro na interface do usuário).

    Aplicação Automática da Validação

    A EF Code-First (começando com a CTP5) agora automaticamente invoca o método Validate() quando um objeto do modelo que implementa a interface IValidatableObject é salvo. Você não precisará escrever qualquer código para fazer com que isso aconteça - esse suporte agora é ativado por padrão.

    Esse novo suporte significa que o código a seguir - o qual viola uma de nossas regras de negócio acima - lançará uma exceção automaticamente (e abortará a transação), quando chamarmos o método "SaveChanges()" em nosso DbContext Northwind:

    imagem

    Além de reativamente tratar de exceções de validação, a EF Code First também permite que você proativamente verifique se há erros de validação. Começando com a CTP5, você pode chamar o método "GetValidationErrors()" na classe base DbContext para recuperar uma lista de erros de validação dentro dos objetos do modelo com os quais você está trabalhando. O método GetValidationErrors() retornará uma lista de todos os erros de validação - independentemente de eles serem gerados através de atributos DataAnnotation ou por uma implementação do método IValidatableObject.Validate().

    A seguir está um exemplo do uso pró-ativo do método GetValidationErrors() para verificar (e tratar) os erros antes de tentar chamar o método SaveChanges():

    imagem

    ASP.NET MVC 3 e IValidatableObject

    A ASP.NET MVC 2 incluiu suporte para aplicar e fazer valer automaticamente os atributos DataAnnotation nos objetos do modelo que são usados com a infra-estrutura de vinculação de dados (databinding) da ASP.NET MVC. A ASP.NET MVC 3 vai além e também faz valer a interface IValidatableObject. Este suporte combinado para a validação do modelo torna mais fácil exibir mensagens de erro apropriadas nos formulários quando ocorrem erros de validação. 

    Para ver isso em ação, vamos considerar um formulário simples Create (Criar) que permite aos usuários criar um novo Produto:

    imagem

    Podemos implementar a funcionalidade Create acima usando uma classe ProductsController que tem dois métodos de ação "Create", igual ao mostrado a seguir:

    imagem

    O primeiro método Create() implementa uma versão da URL /Products/Create que manipula solicitações do tipo HTTP GET - e exibe o formulário HTML para preenchimento. O segundo método Create() implementa uma versão da URL /Products/Create que manipula solicitações do tipo HTTP-POST - e que leva para o servidor os dados do formulário publicado e garante que o formulário seja válido, e se ele for válido, salva os dados no banco de dados. Se houver problemas de validação, ele mostra novamente o formulário com os valores já preenchidos anteriormente. 

    O modelo de visão Razor da nossa visão "Create" (que renderiza o formulário) é igual ao mostrado a seguir:

    imagem

    Uma das coisas agradáveis sobre a implementação do Controlador + Visão acima é que nós não escrevemos qualquer lógica de validação nesta implementação. A lógica de validação e regras de negócios são implementadas inteiramente dentro de nossa camada do modelo, e o controlador ProductsController simplesmente verifica se essas regras são válidas (chamando o método de ajuda ModelState.IsValid) para determinar se ele deve tentar salvar as alterações ou se deve exibir novamente o formulário com os erros. As chamadas para o método de ajuda Html.ValidationMessageFor() dentro da nossa visão simplesmente exibem as mensagens de erro provenientes das DataAnnotations e do método IValidatableObject.Validate() referentes ao modelo da nossa classe Product. 

    Nós podemos ver o cenário descrito acima em ação através do preenchimento de dados inválidos no formulário e ao tentar submetê-los ao servidor:

    imagem

    Observe acima que quando clicamos no botão "Create" nós recebemos uma mensagem de erro. Isso aconteceu porque nós marcamos a caixa de seleção "Discontinued" (Descontinuado), ao mesmo tempo em que inserimos um valor em UnitsOnOrder (e assim violamos uma de nossas regras de negócio). 

    Você pode perguntar - como a ASP.NET MVC sabe destacar e mostrar a mensagem de erro ao lado da caixa de texto UnitsOnOrder? Ela fez isso porque agora a ASP.NET MVC 3 honra a interface IValidatableObject quando faz a vinculação de dados do modelo e retornará as mensagens de erro a partir de falhas de validação prevenientes desta.

    A regra de negócio dentro da nossa classe do modelo Product indicava que a propriedade "UnitsOnOrder" deveria ser realçada/destacada quando a regra de negócio fosse violada:

    imagem

    Nosso método de ajuda Html.ValidationMessageFor() sabia como exibir a mensagem de erro da regra de negócio (ao lado da caixa de texto UnitsOnOrder) em virtude do nome da propriedade que nós fornecemos:

    imagem

    Mantendo as coisas DRY

    A ASP.NET MVC e a EF Code First permite que você mantenha a sua validação e regras de negócios em um só lugar (dentro da sua camada do modelo), evitando que elas se misturem com seus Controladores e Visões. 

    Mantendo a lógica de validação na camada do modelo ajuda a garantir que não haja duplicação de validação/lógica de negócio enquanto você adiciona mais Controladores e Visões em sua aplicação. A ASP.NET MVC e a EF Code First te permitem alterar rapidamente suas regras de negócio/lógica de validação em um único lugar (dentro da sua camada do modelo) - fazendo com que todos os controladores/visões em toda a sua aplicação imediatamente reflitam essas alterações. Isso te ajuda a manter o código da sua aplicação limpo e de fácil manutenção e facilita muito a evolução e atualização da sua aplicação no futuro.

    Resumo

    A EF Code First (começando com a CTP5) agora possui suporte nativo tanto para DataAnnotations quanto para a interface IValidatableObject. Isso permite que você facilmente adicione regras de validação e de negócios em seus modelos, e a EF automaticamente fará valer tais regras sempre que alguém tentar persistir alterações nos objetos do modelo em um banco de dados.

    A ASP.NET MVC 3 também suporta agora ambas DataAnnotations e IValidatableObject, o que torna ainda mais fácil usá-las em sua camada do modelo da EF Code First - fazendo com que os controladores/visões dentro da sua camada web automaticamente as honrem e suportem. Isto torna mais fácil construir aplicações limpas e altamente sustentáveis.

    Você não tem que usar DataAnnotations ou IValidatableObject para realizar a sua validação/lógica de negócios. Você sempre pode criar sua arquitetura de validação personalizada e/ou usar outros frameworks/padrões de validação mais avançados se você quiser. Mas, para muitas aplicações este suporte nativo provavelmente será suficiente - e fornecerá uma maneira altamente produtiva para construir soluções.

    Espero que ajude,

    Scott

    PS Além do blog, eu também estou agora utilizando o Twitter para atualizações rápidas e para compartilhar links.Siga-me em: twitter.com/ScottGu

     

    Texto traduzido do post original por Leniel Macaferi.

  • Entity Framework 4 "Codificação Antecipada": Mapeamento Personalizado do Esquema do Banco de Dados

    No post da última semana eu demonstrei como usar as convenções de mapeamento padrão do EF4 para permitir a persistência do banco de dados. Estas convenções padrão funcionam muito bem para novas aplicações, permitindo que você evite a configuração de qualquer coisa para mapear classes de/para um banco de dados.