Olá pessoal, em nosso último artigo aqui no DevGoiás falamos sobre ADO.Net Data Services v1.0, agora vamos ver algumas novidades que vem por aí com a versão v1.5 e também uma novidade importante do Entity Framework 4.0.
Vamos começar com o EF 4, que vem com muitas novidades e dentre elas falaremos do recurso "Model-First Support", ou seja, podemos desenvolver o modelo primeiramente e depois gerar as tabelas no banco de dados. A primeira coisa é criar o arquivo do EF, o EDMX. Iremos trabalhar com o básico de um sistema de cadastro de clientes, que é algo que todos provavelmente conhecem.
Primeiramente criamos o EDMX do zero (sem banco de dados) e vamos criar três entidades:

Criamos o modelo primeiramente e agora precisamos então, com o banco de dados já criado, gerar o script para criação das tabelas referentes do nosso modelo de entidades, para isso utilizamos do novo recurso do EF 4 clicando no canvas do designer do EF e selecionando a opção "Generate Database Script From Model", isso vair abrir um wizard onde poderemos indicar o banco de dados, e no final é gerado um arquivo de script salvo no projeto, então é só rodar ele diretamente do Visutal Studio e pronto temos o banco de dados criado com as tabelas.

Wizard de geração do script

Script das tabelas do banco de dados.
No final o arquivo EDMX é atualizado e as informações referentes a conexão com o banco de dados também são inseridas no web.config/app.config, com isso já conhecemos um recurso muito importante no EF 4.
Agora vamos criar o serviço de dados para o nosso modelo, para isso vamos adicionar no projeto um novo arquivo do ADO.Net Data Service, em nosso exemplo o arquivo "DSModelo.svc".

Adicionando novo arquivo do ADO.Net Data Service
Após isso precisamos configurar o serviço, conforme podemos ver abaixo existem algumas diferenças principalmente em relação a configuração da versão do protocolo e aceitação de requisições de projeções, itens que veremos mais abaixo.
public class DSModelo : DataService< ModeloContainer >
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.UseVerboseErrors = true;
//configurações específica da versão 1.5
config.DataServiceBehavior.AcceptProjectionRequests = true;
config.DataServiceBehavior.MaxProtocolVersion =
System.Data.Services.Common.DataServiceProtocolVersion.V2;
}
}
Agora podemos utilizar de alguns dos novos rescursos do ADO.Net Data Services, recursos muito aclamados pela comunidade. Dentre os vários recursos vamos destacar neste artigo os seguintes:
- Projections, Possibilidade de obter apenas algumas propriedades de uma entidade, em vez de sermos forçados a ir buscar todas as propriedades. Com isto temos agora disponível um novo conjunto de expressões que nos proporcionam esta funcionalidade no URI.
- Row Count, Capacidade de determinarmos o número de elementos de um conjunto de entidades sem precisar buscar todas ou mesmo criar uma query customizada para isso.
Então lá vamos nós para as "Projeções", até a versão 1.0 do ADO.Net Data Services se precisarmos buscar apenas uma lista de Id's e Nomes de nossa entidade Clientes, por exemplo, nos era retornada uma lista com todas as propriedades da entidade em questão, em alguns casos isso pode gerar um tráfego intenso, mas agora você pode indicar apenas as colunas que deseja, vamos ver o exemplo:
Em nosso modelo usado temos a entidade "Clientes" que contém as seguintes propriedades: Id, Nome e DataUltimoPedido. No entanto queremos apenas uma lista com o Id e Nome, isso não era possível até a primeira versão. Agora podemos com o CTP2 fazer isso através do uso do Linq conforme podemos ver abaixo:
var ctx = new srModelo.ModeloContainer(new Uri("http://localhost:1844/DSModelo.svc"));
var listaclientes = from c in ctx.Clientes
select new { c.Id, c.Nome };
A expressão linq gera a seguinte Uri:
http://localhost:1844/DSModelo.svc/Clientes(2)?$select=Id,Nome
Note que temos agora uma nova palavra reservada do Astoria chamada "$select" e assim temos o seguinte resultado de retorno:

Outro recurso muito interessante é o "Row Count", até a versão 1.0 se você precisava saber o número de entidades de uma determinada consulta com o Astoria, ou você busca toda a lista e depois no "client" fazia a contagem ou deveria criar uma query customizada.
Agora seus problemas acabaram :) com o "Row Count" que você pode utilizar na uri com palavra reservada "$count" ou mesmo através do linq conforme abaixo:
var listaclientes = from c in ctx.Clientes
select c).Count();
Assim teremos como resultado a quantidade de entidades clientes conforme o filtro fornecido. O mesmo resultado pode ser obtido através da seguinte Uri:
http://localhost:1844/DSModelo.svc/Clientes/$count
Conclusão: O ADO.Net Data Services está trazendo muitos recursos interessantes e necessários para a expansão do seu uso pela comunidade, espero que o time do produto esteja sempre atento as solicitações da comunidade. Estamos acompanhando a evolução do produto e assim que fizermos mais testes vamos compartilhando com a comunidade.
Até a próxima!