Entity Framework Code-First em pauta!

Olá Pessoal!

Ultimamente tenho recebido alguns e-mails de pessoas querendo saber por onde começar a estudar o Entity Framework (EF) Code-First, e também querendo discutir e compartilhar suas experiências.

Vamos brevemente contextualizar o que é o EF Code-First. O EF Code-First é um nova forma de desenvolvimento com o EF que permite a criação do esquema de banco de dados a partir de classes CLR, isto é, classes criadas através do .Net Framework. Além da criação de nosso modelo de dados, o EF Code-First permite o mapeamento de classes para um banco de dados existente. A configuração do EF Code-First pode ser feita de dois modos, sendo eles: Data Annotations, atributos que decoram nossas propriedades e classes; ou através da Fluent API, sintaxe própria do EF que provê recursos de mapeamento objeto-relacional.Leia mais »

Uso de Include em consultas com o Entity Framework Code First

Um tópico muito discutido nos fóruns de acesso a dados (http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/threads) e LINQ (http://social.msdn.microsoft.com/Forums/pt-BR/linqpt/threads) é o uso de Lazy Load no Entity Framework.

O Lazy Load (ou Lazy Loading) nada mais é do que um mecanismo adotado pelos frameworks de persistência a dados para carregar as informações sobre demanda, isto é, carregar em memória apenas os dados de propriedades que não sejam relacionamentos para outras entidades. Este tipo de recurso minimiza o consumo de memória, o trafego de dados pela rede e os recursos de consulta do banco de dados, além de tornar a consulta mais rápida.Leia mais »

EntityTypeConfiguration

Quando utilizamos a Fluent API para configuração do mapeamento de nosso banco de dados, corremos o risco de tornar o método OnModelCreating muito extenso e complexo.

Para evitar este cenário podemos criar uma classe que herde de EntityTypeConfiguration e que descreva qual a configuração de nosso mapeamento.

A classe EntityTypeConfiguration permite o mapeamento indvidual de nossas entidades, tornamos o comportamento de nosso método OnModelCreating mais simples e encapsulando o mapeamento de nossas entidades em classes próprias para isso.Leia mais »

Utilizando Isolated Storage no Windows Phone

Para preservar os dados de uma aplicação Windows Phone precisamos armazena-los em algum lugar do telefone. Para isso temos de utilizar recursos pertencentes ao Isolated Storage. Para aplicações Windows Phone todas as operações de IO (input-output) estão restritas ao Isolated Storage, esse recurso aprimora a segurança do aparelho e reduz as chances de acesso não autorizado ou corrompimento de arquivos do sistema, ou até mesmo de dados de outras aplicações.

Os tipos de armazenamento existentes no Windows Phone são três:
– Settings: armazenamento em estruturas de dados que funcionam como pares de chave/valor, assim como Dictionaries no .Net Framework (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx).
– Files and Folders: acesso e armazenamento em estruturas de pastas restritas ao acesso de sua aplicação.
– Relational Data: armazenamento de dados em bancos de dados locais, no caso SQL CE (como descrito neste post https://ferhenriquef.com/2011/10/17/windows-phone-mango-e-microsoft-sql-ce/)Leia mais »

Anúncio de melhorias de performance do Entity Framework 5.0

É certo que o uso de ferramentas de mapeamento objeto-relacional reduzem nossa performance durante o acesso a base de dados. Esta perda pode parecer invisível e na maioria das vezes não sentimos esse impacto por ser uma diferença muitas vezes irrisória, já que tais diferenças são medidas em milissegundos ou microssegundos.

Alguns profissionais preferem não utilizar ferramentas de mapeamento objeto-relacional e adotam essa perda de performance como uma das justificativas para isso, mesmo que essa perda seja muitas vezes invisível.

Assim, desde os primórdios do LINQ, perguntou-se e inferiu-se muito sobre a performance das ferramentas de mapeamento objeto-relacional do Microsoft .Net Framework. E esta semana, o time de ADO.Net liberou um post interessante em seu blog (http://blogs.msdn.com/b/adonet/).Leia mais »

Exportando dados de um DataTable para o Microsoft Access (Exporting data to Microsoft Access)

Alguns anos atrás passei pela necessidade de exportar um conjunto de dados vindo do SQL Server para o Microsoft Access, e nesses últimos dias encontrei uma pessoa no Fórum do MSDN com o mesmo problema que eu passei. Na época pesquisei por muitas soluções mas não encontrei nada referente a isso, apenas encontrei muitas pessoas com o mesmo problema que eu. Na época acabei criando minha própria solução: uma classe que recebia como parâmetro um DataTable, lia os metadados das colunas, construía a tabela junto com suas colunas no banco de dados e então exportava os dados. Esta solução ficou na “gaveta” esses últimos anos e agora vou dividir essa solução com a comunidade.

O algoritmo de exportação dos dados segue os seguintes passos:
– Criar o arquivo MDB caso o mesmo ainda não existe. Se o arquivo já existir então ele é mantido é alterado com a inclusão da nova tabela.
– Apaga a tabela caso já exista no banco de dados. Na época que criei este algoritmo tentei fazer acesso à tabela MSysObjects, que armazena os metadados do arquivo Microsoft Access, para validar se a tabela já existe, mas apenas recebi mensagens de acesso negado e não consegui dar continuidade a este recurso.
– Cria uma nova tabela no banco de dados com a estrutura contida no DataTable.
– Exporta os dados para o banco de dados.Leia mais »

Agrupamento de dados via LINQ e Lambda

Nos últimos tempos, participando do fórum do MSND sobre LINQ (http://social.msdn.microsoft.com/Forums/pt-br/linqpt/threads ), notei que muitas dúvidas surgiram com relação a sintaxe do LINQ para o agrupamento de dados. Dessa forma, espero neste post fazer um breve overview da sintaxe do LINQ para agrupamento, e também demonstrar a sintaxe Lambda correspondente.

Contexto do exemplo
Para estes exemplos utilizei uma estrutura de dados chamada Cidade. Esta estrutura contém: o nome da cidade, a quantidade de habitantes que ali vivem e o estado desta cidade dentro do país.

Os dados utilizados para a execução do exemplo estão chumbados no código e são originados do seguinte método:Leia mais »

Utilização de Impersonation para execução de PowerShell via ASP.Net

Dentre os meus últimos desafios surgiu-me a necessidade de executar um comando PowerShell em um servidor via uma página ASP.Net, mas com a premissa de executar este comando dentro de um contexto seguro, isto é baseado em permissões de usuário distintas daquelas que estão rodando o Application Pool do IIS.

Desta forma, de acordo com as credenciais do usuário logado na aplicação, seria permitido ou não a execução dos comandos via PowerShell. Entretanto, como princípio de segurança, a execução deste comando seria feita sobre um contexto diferente do usuário do Application Pool.

Para tanto, me baseei em dois posts: o primeiro de Antoine Habert (MVP de PowerShell) que ensina como executar comandos PowerShell via páginas ASP.Net (http://devinfra-us.blogspot.com/2011/02/using-powershell-20-from-aspnet-part-1.html) e um segundo post do Microsoft Support que demonstra como implementar Impersonation programaticamente em aplicações ASP.Net (http://support.microsoft.com/kb/306158).

Para a execução deste exemplo será preciso fazer download e instalação do Windows PowerShell 2.0 Software Development Kit (http://http://www.microsoft.com/download/en/details.aspx?id=2560).Leia mais »

Microsoft Virtual Academy

Olá pessoal,

Essa semana a Microsoft lançou o MVA (Microsoft Virtual Academy), esse projeto tem como objetivo ajudar no desenvolvimento da sua carreira Microsoft.
É uma plataforma de aprendizagem na nuvem, que disponibiliza:
•    Formação completamente de graça.
•    Recursos disponíveis on-line, vídeo on demand e artigos de especialistas.
•    Três tipos de conteúdo, cursos , carreiras e especializações.
•    Documentos especializados, laboratórios on-line e Webcasts.
•    Categorias de Reconhecimento: Bronze, Silver, Gold, Platinum.
•    Download de documentos para conclusão de cada conteúdo e uma transcrição com o resumo da atividade de cada usuário no MVA.

As categorias existentes são: Clustering, Hyper-V, IaaS, Office 365, PaaS, Private Cloud, Public Cloud, SaaS Security, SQL Azure, System Center, Virtual Machine,  VDI, Virtualization, VMware, Windows Azure, Windows Client e Windows Phone.Leia mais »

EF41 – Inicializadores de Banco de Dados

Ao trabalharmos com o Entity Framework Code First nos deparamos com diversas convenções. Uma das mais importantes é processo de construção do banco de dados. O Entity Framework 4.1 nos fornece nativamente três inicializadores de banco de dados, sendo eles:

DropCreateDatabaseIfModelChanges:apaga e recria o banco de dados toda vez que alguma alteração no modelo de classes for identificada. Observação: se a tabela EdmMetadata não estiver sendo criada no banco de dados (através da remoção da convention IncludeMetadataConvention), então está opção não irá funcionar e irá disparar uma Exception do tipo NotSupportedException.

CreateDatabaseIfNotExists:cria o banco de dados se o mesmo não existir, se o modelo de classes sofrer alguma alteração será disparada uma exception.

DropCreateDatabaseAlways:apaga e recria o banco de dados sempre, mesmo que nenhuma alteração no modelo de classes tenha sido feita.Leia mais »