Compartilhar via


Espacial – Designer de EF

Observação

Apenas a partir do EF5 : os recursos, as APIs etc. discutidos nessa página foram introduzidos no Entity Framework 5. Se você estiver usando uma versão anterior, algumas ou todas as informações não se aplicarão.

Esse vídeo e passo a passo mostram como mapear tipos espaciais com o Code First do Designer de Entity Framework. Ele também demonstra como usar uma consulta de LINQ para encontrar uma distância entre dois locais.

Este passo a passo usará o Model First para criar um novo banco de dados, mas o Designer de EF também poderá usado com o fluxo de trabalho Database First para mapear para um banco de dados existente.

O suporte ao tipo espacial foi introduzido no Entity Framework 5. Observe que para usar os novos recursos como tipo espacial, enumerações e funções com valor de tabela, deverá direcionar o .NET Framework 4.5. O Visual Studio 2012 tem como destino o .NET 4.5 por padrão.

Para usar tipos de dados espaciais, também deverá usar um provedor do Entity Framework que tenha suporte espacial. Consulte o suporte do provedor para tipos espaciais para obter mais informações.

Há dois tipos de dados espaciais principais: geografia e geometria. O tipo de dados de geografia armazena dados elipsoidais (por exemplo, coordenadas de latitude e longitude de GPS). O tipo de dados de geometria representa o sistema de coordenadas Euclideano (simples).

Assista ao vídeo

Esse vídeo mostra como usar tipos espaciais com o Designer de Entity Framework. Ele também demonstra como usar uma consulta de LINQ para encontrar uma distância entre dois locais.

Apresentado por: Julia Kornich

Vídeo: WMV | MP4 | WMV (ZIP)

Pré-Requisitos

Você precisará ter o Visual Studio 2012, Ultimate, Premium, Professional ou Web Express Edition instalado para concluir esse passo a passo.

Configurar o Projeto

  1. Abra o Visual Studio 2012
  2. No menu Arquivo, aponte para Novo e selecione Projeto
  3. No painel esquerdo, selecione Visual C# e selecione o modelo de Console
  4. Insira SpatialEFDesigner como o nome do projeto e selecione OK

Criar um novo modelo usando o Designer de EF

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto, aponte para Adicionar e selecione Novo Item
  2. Selecione Dados no menu à esquerda e selecione Modelo de Dados de Entidade ADO.NET no painel Modelos
  3. Insira UniversityModel.edmx para o nome do arquivo e clique em Adicionar
  4. Na página Assistente de Modelo de Dados de Entidade, selecione Modelo Vazio na caixa de diálogo Escolher Conteúdo do Modelo
  5. Clique em Concluir

O Designer de Entity, que fornece uma superfície de design para editar seu modelo, é exibido.

O assistente executa as seguintes ações:

  • Gera o arquivo EnumTestModel.edmx que define o modelo conceitual, o modelo de armazenamento e o mapeamento entre eles. Define a propriedade Processamento de Artefatos de Metadados do arquivo .edmx como Inserir no Assembly de Saída, para que os arquivos de metadados gerados sejam inseridos no assembly.
  • Adiciona uma referência aos seguintes assemblies: EntityFramework, System.ComponentModel.DataAnnotations e System.Data.Entity.
  • Cria arquivos UniversityModel.tt e UniversityModel.Context.tt e os adiciona no arquivo .edmx. Esses arquivos de modelo T4 geram o código que define o tipo derivado de DbContext e os tipos POCO que são mapeados para as entidades no modelo .edmx

Adicionar um novo tipo de entidade

  1. Clique com o botão direito do mouse em uma área vazia da superfície de design, selecione Adicionar –> Entidade, a caixa de diálogo Nova Entidade será exibida
  2. Especifique a University para o nome do tipo e especifique a UniversityID para o nome da propriedade chave, deixe o tipo como Int32
  3. Clique em OK
  4. Clique com o botão direito do mouse na entidade e selecione Adicionar Novo –> Propriedade Escalar
  5. Renomear a nova propriedade para Nome
  6. Adicione outra propriedade escalar e renomeie-a como Local Abra a janela Propriedades e altere o tipo da nova propriedade para Geografia
  7. Salvar o modelo e compilar o projeto

    Observação

    Ao compilar, talvez sejam exibidos avisos sobre entidades e associações não mapeadas na Lista de Erros. Ignore esses avisos, porque depois que optarmos por gerar o banco de dados com base no modelo, os erros desaparecerão.

Gerar banco de dados a partir do modelo

Agora podemos gerar um banco de dados baseado no modelo.

  1. Clique com o botão direito do mouse em um espaço vazio na superfície do Designer de Entidade e selecione Gerar Banco de Dados a partir do Modelo
  2. A caixa de diálogo Escolher a Conexão de Dados do Assistente para Gerar Banco de Dados é exibida, selecione Nova Conexão especifique (localdb)\mssqllocaldb para o nome do servidor e University para o banco de dados e selecione OK
  3. Uma caixa de diálogo perguntando se deseja criar um novo banco de dados será exibida, selecione Sim.
  4. Selecione Avançar e o Assistente para Criar Banco de Dados gera a DDL (linguagem de definição de dados), para criar um banco de dados. A DDL gerada é exibida na caixa de diálogo Resumo e Configurações, observe que a DDL não contém uma definição para uma tabela mapeada para o tipo de enumeração
  5. Selecione Concluir, ao selecionar Concluir não executa o script da DDL.
  6. O Assistente para Criar Banco de Dados faz o seguinte: Abre o UniversityModel.edmx.sql no Editor T-SQL. Gera o esquema do repositório e as seções de mapeamento do arquivo EDMX. Adiciona informações de cadeia de conexão ao arquivo App.config
  7. Clique com o botão direito do mouse no Editor do T-SQL e selecione Executar A caixa de diálogo Conectar ao Servidor é exibida, insira as informações de conexão da etapa 2 e selecione Conectar
  8. Para exibir o esquema gerado, clique com o botão direito do mouse no nome do banco de dados no Pesquisador de Objetos do SQL Server e selecione Atualizar

Persistir e recuperar dados

Abra o arquivo Program.cs em que o método Principal está definido. Adicione o código a seguir à função Principal.

O código adiciona dois novos objetos do University ao contexto. As propriedades espaciais são inicializadas com o método DbGeography.FromText. O ponto de geografia representado como WellKnownText é passado para o método. O código salva os dados. Em seguida, a consulta de LINQ que retorna um objeto do University onde sua localização está mais próxima do local especificado é construída e executada.

using (var context = new UniversityModelContainer())
{
    context.Universities.Add(new University()
    {
        Name = "Graphic Design Institute",
        Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
    });

    context.Universities.Add(new University()
    {
        Name = "School of Fine Art",
        Location = DbGeography.FromText("POINT(-122.335197 47.646711)"),
    });

    context.SaveChanges();

    var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");

    var university = (from u in context.Universities
                                orderby u.Location.Distance(myLocation)
                                select u).FirstOrDefault();

    Console.WriteLine(
        "The closest University to you is: {0}.",
        university.Name);
}

Compile e execute o aplicativo. O programa produz a seguinte saída:

The closest University to you is: School of Fine Art.

Para exibir dados no banco de dados, clique com o botão direito do mouse no nome do banco de dados no Pesquisador de Objetos do SQL Server e selecione Atualizar. Em seguida, clique no botão direito do mouse na tabela e selecione Exibir dados.

Resumo

Neste passo a passo, analisamos como mapear tipos espaciais usando o Designer de Entity Framework e como usar tipos espaciais no código.