Entity Framework 4.1

O Entity Framework 4.1 (EF 4.1) é um release que funciona sobre o ADO.Net Entity Framework incluso no .Net Framework 4.0. O EF 4.1 trás como novidade um novo DbContext e oficializa o Code First, antes um projeto paralelo do time de ADO.Net.

O Code First objetiva a configuração do modelo e criação do banco de dados a partir de nossas classes C# ou Visual Basic .Net, e/ou o mapeamento de um banco de dados existente.

Quais as novidades?
DbContext API – A nova classe System.Data.Entity.DbContext é uma versão alternativa ao ObjectContext, e é a classe preferencial para integração com banco de dados.
DbSet – Versão simplificada do ObjectSet, perfeita para fazer CRUD (Create, Retrive, Update e Delete) de um tipo existente do modelo.
ADO.Net DbContext Generator T4 Templates – ferramenta geradora de entidades POCO (Plain-Old CLR Objects).
Validation – O DbContext automaticamente valida entidades antes de salvá-las no banco de dados.
Code First – Code First permite a construção de modelos de bancos de dados através de nossas classes C# e Visual Basic .Net, além da adição de configurações através da atributos nas classes ou configurações no DbContext.

Vamos abordar mais sobre o Entity Framework 4.1 neste espaço nos próximos meses, a fim de ampliar o conhecimento da comunidade sobre essa tecnologia tão fantástica.

Por
Fernando Henrique Inocêncio Borba Ferreira.

Microsoft – e-books grátis (free e-books)

A Microsoft disponibilizou vários livros, em versão digital, de forma gratuíta.
Resolvi compartilhar alguns links através deste post.
Seguem os links:

Own Your Space–Keep Yourself and Your Stuff Safe Online
http://www.microsoft.com/download/en/details.aspx?displayLang=en&id=1522

Windows Phone Programming in C# For Beginners
http://blogs.msdn.com/b/mvplead/archive/2011/01/28/free-ebook-windows-phone-programming-in-c-for-beginners.aspx

Silverlight for Windows Phone
http://blogs.msdn.com/b/lebanon/archive/2011/02/25/free-ebook-silverlight-for-windows-phone.aspx

Windows Phone Programming in C#
https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8729&c1=en-us&c2=0&Login=&wa=wsignin1.0

Programming Windows Phone 7
http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx

Programming Windows Phone 7 (Special Excerpt 2)
http://blogs.msdn.com/b/microsoft_press/archive/2010/08/02/free-ebook-petzold-s-programming-windows-phone-7-special-excerpt-2.aspx

Own Your Future: Update Your Skills with Resources and Career Ideas from Microsoft
http://blogs.msdn.com/b/microsoft_press/archive/2010/03/03/free-ebook-own-your-future-update-your-skills-with-resources-and-career-ideas-from-microsoft.aspx

11 Steps to Create a Successful Web Site
http://blogs.msdn.com/b/officeliveguy/archive/2009/02/12/fre-ebook-11-steps-to-create-a-successful-web-site.aspx

Build a website that sells
http://blogs.msdn.com/b/officeliveguy/archive/2009/02/12/free-e-book-build-a-website-that-sells.aspx

Windows Azure
http://blogs.msdn.com/b/innov8showcase/archive/2010/07/06/free-e-book-on-windows-azure.aspx

First Look Microsoft Office 2010
http://blogs.msdn.com/b/microsoft_press/archive/2010/01/20/free-ebook-first-look-microsoft-office-2010.aspx

Microsoft Office 365: Connect and Collaborate Virtually Anywhere, Anytime
http://blogs.msdn.com/b/microsoft_press/archive/2011/08/17/free-ebook-microsoft-office-365-connect-and-collaborate-virtually-anywhere-anytime.aspx

Moving to Microsoft Visual Studio 2010
http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx

Windows 7 troubleshooting tips
http://blogs.msdn.com/b/microsoft_press/archive/2009/10/26/free-e-book-windows-7-troubleshooting-tips.aspx

Understanding Microsoft Virtualization Solutions
http://blogs.msdn.com/b/microsoft_press/archive/2010/02/16/free-ebook-understanding-microsoft-virtualization-r2-solutions.aspx

Introducing Microsoft SQL Server 2008 R2
http://blogs.msdn.com/b/microsoft_press/archive/2010/04/14/free-ebook-introducing-microsoft-sql-server-2008-r2.aspx

Mais livros em http://social.technet.microsoft.com/search/en-US?query=Free%20e-book%3a&startindex=0

Por
Fernando Henrique Inocêncio Borba Ferreira.

Introdução ao Entity Framework Code First CTP 5

O objetivo deste post é apresentar o funcionamento do Entity Framework Code-First CTP 5. Este conjunto de bibliotecas ainda não está disponível na instalação do Visual Studio 2010, nem na instalação do Microsoft .Net Framework 4, pois ainda está em fase de testes e melhorias, por isso que ainda é um CTP (Community Technology Previews). O EF Code-First, apesar de ser um CTP, já está na versão 5, e apresenta muitas facilidades que auxiliam os desenvolvedores de software.

Nas próximas linhas apresentarei um exemplo de como trabalhar com o EF Code-First. Neste exemplo utilizo o conceito POCO (Plain Old CLR Objects), já discutido em um post anterior. Faremos a persistência dos dados de algumas entidades no banco de dados, e o EF Code-First ficará encarregado de fazer o mapeamento objeto-relacional para nossa aplicação.

Para utilizar o Entity Framework Code-First CTP 5 faça o download do mesmo neste link e siga os seguintes passos:

1 – Crie as tabelas no banco de dados Microsoft SQL Server, conforme o script abaixo:

POCO_SQL

2 – No Visual Studio 2010, crie uma solution em branco. Para este exemplo criei uma solution com o nome “SolutionEF_CTP5”.

3 – Adicione um projeto Class Library a solution. Para este projeto utilizei o nome “EFCTP5.Data”.

4 – Crie as classes Cliente, Endereco, Solicitacao conforme o código abaixo:

POCO_CLIENTE

POCO_ENDERECO

POCO_SOLICITACAO

5 – Após a adição destas classes, faça referências as DLLs:

  • System.Data.Entity
  • EntityFramework
    (geralmente localizada em C:\Program Files (x86)\Microsoft ADO.NET Entity Framework Feature CTP5\Binaries\)
  • System.Configuration

6 – Criar a classe de contexto, que irá administrar as requisições com a base de dados. Faça esta classe herdar de DbContext (System.Data.Entity). Adicione propriedades para representação das tabelas utilizando o tipo de dados DbSet – este tipo de dados é próprio para representação de coleções e entidades que podem servir para construção de queries. Sobrescreva o método “OnModelCreating”, com o objetivo de evitar a convenção de que o nome das tabelas devem estar no plural (pluralizados). Adicione um bloco de código no construtor desta classe para que a string de conexão seja preenchida sempre que o contexto de banco de dados for instanciado.

POCO_CONTEXT

8 – Criei um projeto console para testar a aplicação e adicione referência ao projeto criado anteriormente e a DLL do Entity Framework  Code First CTP 5.

POCO_ESTRUTURA

9 – Adicione um arquivo “App.Config” ao projeto e insira o seguinte bloco de configuração atribuindo uma string de conexão para o seu banco de dados:

POCO_STRING DE CONEXAO

10 – Adicione o código abaixo, na aplicação console, para testar a inclusão de novos registros.

POCO_INSERT

11 – Adicione o código abaixo, na aplicação console, para a consulta de registros cadastrados na base de dados.

POCO_SELECT

[]s! e até o próximo…

Utilizando ADO.Net POCO Entity Generator

Uma nova abordagem de mapeamento objeto-relacional é o POCO (Plain Old CLR Object), que permite a utilização de nossas próprias classes como entidades dentro do modelo de mapeamento. Esta abordagem preza a utilização de classes simples, que não façam referência a frameworks especializados, que não dependam de soluções de terceiros, que não implementem nenhuma interface especial e que não dependam de nenhuma hierarquia de namespace.

O ADO.Net POCO Entity Generator é um template do Visual Studio 2010 que auxilia na construção de projetos que adotem o POCO criando entidades a partir de um modelo de dados. Neste post veremos quais os passos necessários para adoção desta técnica em projetos e como utilizar este template do Visual Studio 2010.

1 – Crie a tabela Person no banco de dados, conforme o script SQL abaixo:

clip_image002

2 – Crie uma solution no Visual Studio 2010 em branco.

clip_image004

3 – Adicione dois projetos Class Library a solution, a estes novos projetos atribua os nomes Data e Entities.

clip_image006

4 – Selecione o projeto Data e adicione um novo item utilizando o template ADO.Net Entity Data Model. No exemplo, criei com o nome dbModel.edmx. Este item é aquele comumente utilizado para adições de mapeamentos objeto-relacionais através do Entity Framework. Nas telas seguintes devem ser definidas: a conexão com o banco de dados e as tabelas que serão mapeadas. Neste exemplo apenas mapeei a tabela Person.

clip_image008
clip_image010

5 – Após fazer o mapeamento utilizando o Entity Framework, será preciso instalar o template ADO.Net POCO Entity Generator (caso o mesmo não esteja instalado). Clique em “Tools/Extension Manager”, selecione a aba Online Gallery e na caixa de pesquisa (localiza no canto superior direito) e pesquise por “T4”. Após a exibição dos resultados, instale os templates: “ADO.Net C# POCO Entity Generator” e “ADO.Net C# Web Site POCO Entity Generator” (caso a sua linguagem preferida seja VB.Net, então instale os templates próprios para a mesma, eles também estão disponíveis no resultado da consulta feita anteriormente).

clip_image012

clip_image014

6 – Após o download dos templates, volte a ferramenta de mapeamento, clique com o botão direito sobre uma das entidades mapeadas e seleciona a opção “Add Code Generation Item”.
clip_image016
7 – Adicione um novo item utilizando o template ADO.Net POCO Entity Generator. Neste exemplo atribui o nome “ModelPoco.tt”.

clip_image018

8 – Serão criados dois arquivos “ModelPoco.Context.tt” e “ModelPoco.tt”. O arquivo “ModePoco.tt” constrói as entidades, enquanto que o arquivo “ModelPco.Context.tt” gera o contexto tipado. Mova o arquivo “ModePoco.tt” Para o projeto Entities, a fim deixar o projeto classe projeto com suas respectivas responsabilidades separadas, sendo: Data, com acesso aos dados e o Entities, representando as entidades. Adicione no projeto Data referência para o projeto Entities.

clip_image020

9 – Dentro de “Modelo.tt”, na linha 22, altere o caminho do arquivo de mapeamento do Entity Framework para “..\Data\dbModel.edmx”. Isso fará com que a geração das entidades aponte para o arquivo correto, já que mudamos o arquivo de projeto.

clip_image022

Dentro de “ModelPoco.Context.tt”, vá até a linha 44, adicione uma referência para Entities, para que a geração de estruturas POCO possa identificar os tipos de dados utilizados no contexto.

clip_image024

Acesse as propriedades do arquivo “ModelPoco.tt” e altere a propriedade Custom Tool Namespace para “Entities”, faça o mesmo para o arquivo “ModelPoco.Context.tt”, mas modifique o valor da propriedade Custom Tool Namespace para “Data”. Esse passo é importante para que a geração de dados seja feita utilizando os namespaces previstos.

10 – Para testar o código, dentro da solution, crie um novo projeto utilizando o template Console Application. Dentro deste novo projeto faça referência as DLLs: Data, Entities e System.Data.Entity. Copie o arquivo “App.Config” que está localizado no projeto Data para este novo projeto, este passo é importante pois a string de conexão está localizada no mesmo.

clip_image026

11 – Para inserir novos registros utilize o código a seguir:

clip_image028

12 – Para consultar dados da base de dados utilize o código a seguir:

clip_image030

[]s! e até o próximo…

 

Por
Fernando Henrique Inocêncio Borba Ferreira.

Table-Valued Parameters – Utilizando o tipo de dados tabela

Em versões anteriores ao SQL Server 2008 não é possível utilizar tabelas como parâmetro de Stored Procedures. Quando temos de enviar múltiplos dados para o banco de dados, acabamos por enviar tais dados um de cada vez, linha por linha, orientados por um laço de repetição. O SQL Server 2008 proporciona um contorno para esta solução através do uso de Table-Valued Parameters. Os Table-Valued Parameters permitem a passagem de tabelas como parâmetro para Stored Procedures.

Para a utilização deste recurso é necessário seguir um conjunto de passos, vou enumerá-los a seguir:

1 – Tipo dados de tabela

A primeira coisa a se fazer é criar um tipo de dados de tabela (table type). Para a criação deste tipo de dados deve-se utilizar a seguinte sintaxe.

CREATE TYPE dbo.PointAttention AS TABLE
(
Id int NOT NULL,
Description varchar(100) NOT NULL,
Date datetime NOT NULL,
PRIMARY KEY (Id)
)
GO

2 – Trabalhando com o tipo de dados de tabela

Para utilizar este tipo de dados, na sintaxe Transaction-SQL, é preciso criar uma variável deste tipo de dados e então valorizá-la como se fosse uma tabela.

DECLARE @varPoint PointAttention

INSERT INTO @varPoint(Id,Description,Date)
VALUES (100,’Alerta de segurança 1′,’2011-01-20′),
(101,’Alerta de segurança 2′,’2011-01-20′),
(102,’Alerta de segurança 3′,’2011-01-20′),
(103,’Alerta de segurança 4′,’2011-01-20′),
(104,’Alerta de segurança 5′,’2011-01-20′)

SELECT * FROM @varPoint

Assim como qualquer outra tabela, variáveis desse tipo podem ser utilizadas para popular outras tabelas ou servirem em clausulas JOIN dentro de comandos de seleção.

* Observação: por ser uma variável, será limpa da memória automaticamente assim que o escopo de execução for concluído, não consumindo recursos além daqueles necessários durante seu bloco de execução.

3 – Utilizando tipos de dados tabela como parâmetro de Stored Procedures

Agora vamos ao ponto focal deste texto, que é receber uma estrutura de tabela como parâmetro de uma Stored Procedure.

Para execução do exemplo, criemos uma tabela que possua uma estrutura semelhante a do nosso tipo de dados tabela.

CREATE TABLE dbo.tbPointAttention
(
pntId int NOT NULL PRIMARY KEY,
pntDescr varchar(20) NOT NULL,
pntDate datetime NOT NULL
)
GO

Agora, para construção da Stored Procure mantemos a mesma sintaxe, apenas incluindo um parâmetro com o mesmo tipo de dados de tabela criado anteriormente.

CREATE PROC spInsertPAttention @PAttentions PointAttention READONLY
AS
INSERT INTO tbPointAttention
(pntID, pntDescr, pntDate)
SELECT ID,Description,Date
FROM @PAttentions
GO

4 – Consumindo tipos de dados tabela através de aplicações .Net

O ponto chave de utilização deste novo tipo de estrutura é a utilização do tipo de dado SqlDbType.Structured (presente no namespace System.Data.SQLClient, disponível a partir do Microsoft .Net Framework 3.5).

O exemplo abaixo demonstra como essa interação pode ser codificada utilizando C#.

Capturar

 

Vantagens da utilização de Table-Valued Parameters:
– Simplificação da lógica do projeto;
– Permite aos desenvolvedores construírem aplicações performáticas;

Referências:
http://msdn.microsoft.com/en-us/library/bb510489.aspx
http://msdn.microsoft.com/en-us/library/bb675163.aspx
http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

 

Por
Fernando Henrique Inocêncio Borba Ferreira.

Linq to SQL – Atributos de Mapeamento Objeto-Relacional

Quando trabalhamos com LINQ to SQL nosso mapeamento objeto-relacional pode ser construído de duas maneiras: através de um arquivo externo (XML Mapping Source) ou através do mapeamento das classes da aplicação (Attribute Mapping Source). Na grande maioria dos casos acabamos por realizar o mapeamento dos atributos das classes da aplicação e utilizamos o Object Relational Designer – assistente do Microsoft Visual Studio que gera o mapeamento do banco de dados automaticamente para nossa aplicação.

O mapeamento ocorre da seguinte maneira:
– O banco de dados é mapeado para uma instância de um DataContext.
– Uma tabela é mapeada para uma classe
– As colunas da tabela são mapeadas para as propriedades das classes

Podemos construir esse mapeamento manualmente, sem utilizar o assistente do Microsoft Visual Studio, a fim de tornar o código mais simples, gerenciável e inteligível. Para tanto devemos fazer uso dos atributos de mapeamento do LINQ, tais atributos estão contidos no namespace System.Data.Linq.Mapping. Para ter acesso a esses atributos precisamos fazer referência a dll System.Data.Linq.

O mapeamento de uma tabela vai se parecer com o código a seguir:

Mapclasses

… baseado na estrutura da seguinte tabela:

clip_image003

Comparando o código C# e o código SQL, podemos considerar alguns pontos:
– O atributo Table, localizado acima da definição da classe Customer, indica que esta classe corresponde ao mapeamento de uma tabela, mais especificamente a tabela tbMappingCustomer, especificada pelo valor definido na propriedade Name .

– O atributo Column indica que uma propriedade corresponde a uma coluna da tabela, isto é, o atributo Column simboliza o mapeamento entre uma coluna da tabela e uma propriedade da classe.

– O atributo Column possui diversas propriedades Name e CanBeNull são apenas algumas, mas são algumas das principais. Em um próximo post discutiremos outras possibilidades. A propriedade Name do atributo Column indica qual coluna da tabela deverá ser mapeada pelo LINQ to SQL, e a propriedade CanBeNull indica quais colunas aceitam valores nulos na base de dados.

– As propriedades IsDbGenerated e IsPrimaryKey são propriedades do atributo Column, que são utilizadas apenas na propriedade ID, pois essa propriedade mapeia a chave primária da tabela. A propriedade IsDbGenerated indica que o atributo possui valores gerados pelo próprio banco de dados, no nosso caso os valores dessa coluna da tabela são gerados automaticamente pelo Identity(1, 1) citado no código SQL. A propriedade IsPrimaryKey é autoexplicativa, ela indica se a propriedade corresponde ao mapeamento da chave primaria da tabela.

Para persistir as informações é preciso utilizar um objeto que faça a ponte entre a aplicação e o banco de dados, este objetivo é o DataContext. A função do DataContext é traduzir o mapeamento objeto-relacional para comandos que possam ser interpretados pelo banco de dados, assim como converter os dados retornados pelo banco de dados para as entidades do mapeamento objeto-relacional.

No caso, costumo criar uma classe que herde de um DataContext, e que para cada tabela, crie-se um atributo do tipo Table<E> que referencie uma entidade mapeada para a aplicação. Na imagem abaixo demonstro como faço essa implementação.

DataContext

Abaixo um exemplo de como unir a utilização do DataContext customizado, com as entidades mapeadas manualmente.

Implementacao

Obrigado.
[]s!

Referências indicadas:
http://oreilly.com/catalog/9780596519254
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx
http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/09/23/24907.aspx
http://msdn.microsoft.com/en-us/library/bb386971.aspx

Blocos de código não permitidos no Sharepoint

Ao fazer customizações nas páginas do Sharepoint(tanto a versão 2007 quanto a 2010), utilizando server-side code, acabamos encontrando a mensagem de erro abaixo:

Ou em inglês:

An error occurred during the processing of /Pages/test.aspx. Code blocks are not allowed in this file

Esse é um controle de segurança do Sharepoint, para evitar ataques e acesso inapropriados, para resolver esse problema basta adicionar o seguinte código no arquivo Web.Config do Web Application que contém a customização:

<PageParserPaths>
<PageParserPath VirtualPath=”/*” CompilationMode=”Always” AllowServerSideScript=”true” IncludeSubFolders=”true”/>
</PageParserPaths>

A adição desse código deve parecer com o seguinte:

Referência:

http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/0e4b5e49-49ef-4e6b-9ab8-ac954ab8d0be/
http://www.codeproject.com/Articles/120190/How-to-enable-code-blocks-in-Sharepoint-2010-Works.aspx/
http://blogs.msdn.com/b/kaevans/archive/2007/04/26/code-blocks-are-not-allowed-in-this-file-using-server-side-code-with-sharepoint.aspx/

Por
Fernando Henrique Inocêncio Borba Ferreira.

Windows Mobile using LINQ to XML to save data

Nessa aplicação é demonstrado como armazenar dados inseridos por um aplicativo mobile dentro do próprio dispositivo. Para consulta e inserção dos dados foi utilizado LINQ to XML. Esse aplicativo pode ser utilizado como exemplo para aplicações Mobile que precisem de uma forma de armazenamento leve e rápida…

http://code.msdn.microsoft.com/Windows-Mobile-and-LINQ-to-22d9dd67

VSTO – Word – Ribbon

Exemplo de como podemos personalizar controles Ribbon em nossas aplicações VSTO. O Ribbon na verdade funciona por cima de um XAML, nele construímos de forma estática ou dinâmica os controles de nosso menu, além de associarmos eventos conforme necessário. Outro conceito interessante é a utilização de Image MSO (Image Microsoft Office), que nada mais são que icones próprios do Office, que quando utilizados não descaracterizam o visual do aplicativo. Duas dicas: 1) Dentro da classe ThisAddIn adicione o método CreateRibbonExtensibilityObject conforme indicado na aplicação, isso fará com que o seu menu Ribbon fique disponível para o usuário; 2) Para remover este AddIn vá até Opções do Word, escolha a guia Suplementos e procure por WordAddInExample, estes passo irão remover este AddIn dos suplementos do Word. Vlw!

http://code.msdn.microsoft.com/VSTO-Word-Ribbon-56be1de8