Usando ADO .NET Data Services


O meu artigo Apresentando ADO .NET Data Services  apresentou os conceitos básicos sobre este novo recurso presente no Visual Studio 2008 service pack1.

Como prometi vou mostrar agora um exemplo básico de utilização do ADO .NET Data Services de forma a que você possa ver o recurso em ação e tenha uma  idéia das suas possibilidades.

Nosso objetivo é criar um serviço que exponha os dados do banco de dados Northwind.mdf. Vamos usar o Entity Framework para criar , conectar e expor o modelo de dados armazenado no SQL Server

Então vamos ao que interessa...

Abra o Visual Studio 2008 (lembre-se de atualizar com o service pack 1) e no menu File selecione New Project;

Na janela New Project faça o seguinte:

Com isso estaremos criando um novo projeto ASP .NET contendo uma página Default.aspx. Como vamos criar um serviço podemos excluir esta página.

No menu Project clique em Add New Item e na janela Add New Item em Templates selecione o ADO .NET Data Service e informe o nome Nortwhind_DataService.svc e clique no botão OK;

Para este exemplo pretendo expor os dados do banco de dados Northwind por isso informei o nome do serviço como Nortwhind_DataService.svc;

Com isso estaremos incluindo os namespaces System.Data.Services e System.Data.Client no projeto:

Será gerado o código modelo acima que define o nosso data service através da criação da classe Northwind_DataService1 que herda de DataService.

Perceba que o código não esta completo e temos algum trabalho a fazer. O DataService atua de acordo um modelo de dados (data model), um data model que expõe propriedades IQueryable.

Dessa forma, para preencher a classe da nossa fonte de dados precisamos criar um modelo de dados usando o ADO .NET Entity Framework.

No menu Project selecione Add New Item e em seguida selecione ADO .NET Entity Data Model informando o nome NorthwindModel.edmx e clique no botão Add;

O assistente de criação do Entity Data Model será aberto; selecione a opção Generate from database pois vamos gerar nosso modelo a partir do banco de dados Northwind e clique em Next>;

Selecione o banco de dados Northwind do SQL Server 2005 Express Edition , aceite o nome padrão para a entity connection e clique no botão Next>;

A seguir expanda o objeto Tables e selecione todas as tabelas indicadas e clique no botão Finish;

Com isso será criado uma fonte de dados IQueryable chamada NORTHWNDEntities e o modelo de entidades pode ser visto conforme abaixo:

Note que existe a indicação de um erro; clique sobre o erro; Será aberta a janela de código, nela informe o nome da fonte de dados gerada :  NORTHWNDEntities

Agora temos que definir a permissão de acesso as tabelas em nosso modelo de dados gerado.

No código acima vamos descomentar e alterar a linha config.SetEntitySetAccessRule de forma que ela fique assim : config.SetEntitySetAccessRule("*", EntitySetRights.AllRead)

Com isso estamos permitindo que qualquer pessoa acesse as tabelas em nosso modelo e realize operações de atualização, inclusão , consulta e exclusão. Você pode restringir a permissão de acesso se desejar.

Poderíamos também incluir outros métodos para atualizar ou consultar o nosso modelo mas vou deixar isso para outro artigo.

Vamos fazer uma consulta aos nossos dados usando o protocolo REST ou seja via HTTP  GET no Internet Explorer.

Nota: As operações permitidas pelo REST são : POST(criar/atualizar/apagar) , GET(leitura) , PUT(criar, sobrescrever/atualizar) e DELETE(exclusão).

Clique com o botão direito sobre Nortwhind_DataService.svc e selecione a opção Set As Start Page;

Pressione o a tecla F5 para executar o projeto e iniciar o serviço.

O Navegador será aberto e listará todas as entidades com acesso de consulta em nosso modelo de dados:

Para consultar os dados da entidade Categories via HTTP usando GET, digite a seguinte linha na barra de endereço do navegador: http://localhost:1685/Northwind_DataService1.svc/Categories

O resultado pode ser visto no XML gerado na página conforme abaixo:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<feed xml:base="http://localhost:1685/Northwind_DataService1.svc/" _
   xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" _
   xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Categories</title>
  <id>http://localhost:1685/Northwind_DataService1.svc/Categories</id>
  <updated>2009-02-04T22:08:37Z</updated>
  <link rel="self" title="Categories" href="Categories" />
  <entry>
    <id>http://localhost:1685/Northwind_DataService1.svc/Categories(1)</id>
    <title type="text"></title>
    <updated>2009-02-04T22:08:37Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Categories" href="Categories(1)" />
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Products" 
type="application/atom+xml;type=feed" title="Products" href="Categories(1)/Products" />
    <category term="NORTHWNDModel.Categories" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
      <m:properties>
        <d:CategoryID m:type="Edm.Int32">1</d:CategoryID>
        <d:CategoryName>Beverages</d:CategoryName>
        <d:Description>Soft drinks, coffees, teas, beers, and ales</d:Description>
      </m:properties>
    </content>
  </entry>
   .......

Quer mais ???

Como o resultado gerado também retorna a informação sobre o relacionamento entre as tabelas se você deseja retornar todos os pedidos (Orders) para o cliente (Customers) ALFKI pode usar o seguinte comando na URL:

http://localhost:1685/Northwind_DataService1.svc/Customers('ALFKI')/Orders

Dessa forma mostramos uma forma básica de como usar o ADO .NET Data Services para expor os dados de um banco de dados na web acessando o serviço via navegador e HTTP GET.

Aguarde em breve mais artigos sobre ADO .NET Data Services onde irei mostrar como expor os dados usando IQueryable.

Eu sei é apenas ADO .NET , mas eu gosto...

  • Uma introdução sobre o SQL Server Data Services (codinome “Sitka”) e o ADO.NET Data Services (codinome “Astoria”)
  • .NET Novidades 2009

  • ADO .NET Entity Framework - Usando LINQ to Entities

  • Apresentando ADO .NET Data Services


  • José Carlos Macoratti