Aviso aos internautas: esse post é somente sobre programação se você não é programador, veja alguns outros posts interessantes como este.
Como tenho estudado + de 4 horas por dia para as provas de certificações da microsoft 70-515, 70-516, 70-519 , pude aprender muitas coisas nestas duas semanas. Um feature que adorei no novo Entity Framework 4 é a capacidade de gerar POCO (Plain Old CLR Object) classes. Para quem não sabe o que significa POCO, são classes simples, sem atributos de infra-estrutura ou outras responsabilidades, Aquelas classes de entidades que escreviamos antigamente antes de alguns ORM de hoje como EF e Linq to Sql. Pretendemos utilizar este modelo no nosso site: http:www.placetoask.com que hoje usa o excelente mas quase descontinuado “Linq to Sql”, bom vamos lá:
- Abra o vs 2010 e crie um novo projeto Class Library com nome “Data”;

- Adicione ao projeto “Data” um novo item: “Entity Framework Model” com o nome de Northwind(eu usei o northwind mas você pode escolher o database de sua preferencia), escolha “Generate From Database”
- Confirme a copia do DB para o diretório do projeto e escolha Customers, Orders e Products na seleção de Tables.
->
- Como eu esqueci uma tabela que queria inserir, é facil atualizar o EFM, com o botão direito escolha “Update MOdel from Database” e selecione a table “Order Details” que relaciona a Orders com Products:
->
- Agora que seu modelo está como na figura abaixo, podemos adicionar a geração de código POCO no entity framework Model , se ainda não possue o template POCO, baixe pelo online Templates do VS2010, Add item… -> Online Templates -> Ado.Net Poco Entity Generator, se já possue apenas clique com botão direito no designer do EFM e escolha: “add code generation item…” -> “Ado.Net Poco Generator”

- Nesse momento o Code Generation cria dois arquivos: Model1.Context.tt e Model1.tt, nós iremos separar as classes entity que estão dentro do Model1.tt em um novo projeto chamado Entities. Veja o código gerado pelo model1.tt:

- Crie uma nova “Class Library” com nome de “Entities”, segure a Shift key e mova o arquivo Model1.tt para o novo projeto, por movermos o arquivo, vamos precisar fazer uma pequena edição no arquivo para que ele possa gerar o codigo corretamente, então na linha 22 do arquivo Model1.tt mude o código: string inputFile = @”Northwind.edmx”; para string inputFile = @”..\Data\Northwind.edmx”;
- No projeto data clique no arquivo Model1.Context.tt, e em propriedades defina o atributo: customtoolnamespace para Data

- Faça o mesmo para o projeto “Entities” definindo Custom Tool Namespace para “Entities”
- Adicione uma referencia do projeto “Entities” no projeto “Data” e depois coloque uma referencia “using Entities;” no arquivo Model1.Context.cs gerado pelo template automático. Obs. Para visualizar o arquivo você precisa habilitar o “show all files” ;
- Modifique o template Model1.Context.tt na linha 44 adicione o código: using Entities; note que se não fizer isso toda vez que modificar o Modelo tera que colocar essa linha no arquivo Model1.Contex.cs gerado pelo template
- Adicione a solution um novo projeto Console Application para testar o que criamos, a primeira coisa a fazer é copiar o config.application do projeto “Data” para o novo projeto Console , esse passo será necessário para qualquer novo projeto que deseja acessar dados pelo nosso EFM, seja web, windows form etc…
- Digite no program.cs o código e execute :

- O resultado do código quando rodamos:

- Como criar um novo produto? é facil:

- O resultado:

Tá lá! Nossa senhora, não imaginava que fosse tão cansativo salvar e inserir telas para um post, qq dúvida comentem que eu quando puder dou uma ajuda.
Playing with lambda in LinqToSql
April 2, 2009
I love play linq queries in lambda, some days ago i answered a question in stackoverflow: How to transalte this sql query in lambda?
SELECT COUNT(*) AS [value]
FROM [Persons] AS [t0]
INNER JOIN [personlocations] AS [t1] ON [t0].[personId] = [t1].[personid]
INNER JOIN [Locations] AS [t2] ON [t2].[locationid] = [t1].[locationid]
INNER JOIN [PersonRoles] AS [t3] ON [t0].[personId] = [t3].[personid]
INNER JOIN [Roles] AS [t4] ON [t4].[roleid] = [t3].[roleid]
WHERE ([t4].[description] = ‘Student’) AND ([t2].[description] = ‘Flamengo’)
It’s simple:
var persons = Persons
.Join(Personlocations, p=>p.PersonId, ps=>ps.Personid,
(p,ps) => new {p,ps}).Where(a => a.ps.Location.Description ==“Flamengo”)
.Join(PersonRoles,pr=> pr.p.PersonId, r=>r.Personid,(pr,r) => new {pr.p,r}).Where(a=>a.r.Role.Description==“Student”)
.Select(p=> new {p.p});
or:
var persons = Persons.Where(p=>(p.Personlocations.Select(ps=>ps.Location).Where(l=>l.Description == “Flamengo”).Count() > 0)
&& (p.PersonRoles.Select(pr=>pr.Role).Where(r=>r.Description == “Student”).Count() > 0));
or:
var persons = Persons
.Where(p=>(p.Personlocations.Select(ps=>ps.Location)
.Select(l=>l.Description).Contains(“Flamengo”)) &&
(p.PersonRoles.Select(pr=>pr.Role)
.Select(r=>r.Description).Contains(“Student”)));
There are more ways to do this same result in linq. in another post i will discuss some.



![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=138977f8-2157-4ece-9925-e9d5ddf5f53b)