Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Apenas a partir do EF5 - As funcionalidades, APIs, etc. discutidas nesta página foram introduzidas no Entity Framework 5. Se estiver a usar uma versão anterior, parte ou toda a informação não se aplica.
O vídeo e o guia passo a passo mostram como mapear tipos espaciais com o Entity Framework Designer. Também demonstra como usar uma consulta LINQ para encontrar uma distância entre dois locais.
Esta guia usará o Model First para criar uma nova base de dados, mas o EF Designer também pode ser usado com o fluxo de trabalho Database First para mapear para uma base de dados existente.
O suporte a tipos espaciais foi introduzido no Entity Framework 5. Note que, para usar as novas funcionalidades como tipo espacial, enums e funções com valores de tabela, deve direcionar-se ao .NET Framework 4.5. O Visual Studio 2012 tem como alvo o .NET 4.5 por padrão.
Para utilizar tipos de dados espaciais, deve também utilizar um fornecedor de Entity Framework que tenha suporte espacial. Consulte o suporte do prestador para tipos espaciais para mais informações.
Existem dois principais tipos de dados espaciais: geografia e geometria. O tipo de dados geográfico armazena dados elipsoidais (por exemplo, coordenadas GPS, latitude e longitude). O tipo de dados geométrico representa o sistema de coordenadas euclidianas (planas).
Veja o vídeo
Este vídeo mostra como mapear tipos espaciais com o Entity Framework Designer. Também demonstra como usar uma consulta LINQ para encontrar uma distância entre dois locais.
Apresentado por: Julia Kornich
Pre-Requisites
Vai precisar de ter instalado o Visual Studio 2012, Ultimate, Premium, Professional ou Web Express edition para completar esta explicação.
Criar o Projeto
- Open Visual Studio 2012
- No menu Ficheiro , aponte para Novo e depois clique em Projeto
- No painel esquerdo, clique em Visual C# e depois selecione o modelo Consola
- Introduza SpatialEFDesigner como nome do projeto e clique em OK
Crie um Novo Modelo usando o EF Designer
- Clique com o botão direito no nome do projeto no Explorador de Soluções, aponte para Adicionar e depois clique em Novo Item
- Selecione Dados no menu esquerdo e depois selecione ADO.NET Modelo de Dados de Entidade no painel de Modelos
- Introduza UniversityModel.edmx para o nome do ficheiro e depois clique em Adicionar
- Na página do Assistente do Modelo de Dados de Entidade, selecione Modelo Vazio na caixa de diálogo Escolher Conteúdo do Modelo
- Clique em Concluir
O Designer de Entidades, que fornece uma superfície de design para editar o seu modelo, é exibido.
O assistente executa as seguintes ações:
- Gera o ficheiro EnumTestModel.edmx que define o modelo conceptual, o modelo de armazenamento e o mapeamento entre eles. Define a propriedade de Processamento de Artefactos de Metadados do ficheiro .edmx para Embed no Assembly de Saída, para que os ficheiros de metadados gerados fiquem incorporados no assembly.
- Adiciona uma referência aos seguintes assemblies: EntityFramework, System.ComponentModel.DataAnnotations e System.Data.Entity.
- Cria ficheiros UniversityModel.tt e UniversityModel.Context.tt e adiciona-os no ficheiro .edmx. Estes ficheiros de modelo T4 geram o código que define o tipo DbContext derivado e os tipos POCO que fazem correspondência às entidades no modelo .edmx.
Adicionar um Novo Tipo de Entidade
- Clique com o botão direito numa área vazia da superfície de design, selecione Adicionar -> Entidade, e a caixa de diálogo Nova Entidade aparece
- Especifique University para o nome do tipo e especifique UniversityID para o nome da propriedade chave, deixe o tipo como Int32
- Clique OK
- Clique com o botão direito na entidade e selecione Adicionar Novo -> Propriedade Escalar
- Renomear a nova propriedade para Nome
- Adiciona outra propriedade escalar e renomeia-a para Localização. Abre a janela de Propriedades e altera o tipo da nova propriedade para Geografia.
- Guarde o modelo e construa o projeto
Observação
Quando constróis, avisos sobre entidades e associações não mapeadas podem aparecer na Lista de Erros. Pode ignorar estes avisos porque, depois de escolhermos gerar a base de dados a partir do modelo, os erros desaparecem.
Gerar Base de Dados a partir do Modelo
Agora podemos gerar uma base de dados baseada no modelo.
- Clique com o botão direito num espaço vazio na superfície do Designer de Entidades e selecione Gerar Base de Dados a partir do Modelo
- A caixa de diálogo Escolher a Sua Ligação de Dados do Assistente Gerar Base de Dados é exibida. Clique no botão Nova Ligação , especifique (localdb)\mssqllocaldb para o nome do servidor e Universidade para a base de dados e clique em OK
- Aparecerá um diálogo a perguntar se queres criar uma nova base de dados, clica em Sim.
- Clique em Seguinte e o Assistente de Criação de Base de Dados gera linguagem de definição de dados (DDL) para criar uma base de dados O DDL gerado é exibido na Caixa de Diálogo de Resumo e Definições Nota, que o DDL não contém uma definição para uma tabela que corresponda ao tipo de enumeração
- Clicar Terminar Clicar em Terminar não executa o script DDL.
- O Assistente de Criação de Base de Dados faz o seguinte: Abre a UniversityModel.edmx.sql no Editor T-SQL Gera o esquema de armazenamento e as secções de mapeamento do ficheiro EDMX Adiciona informação da cadeia de ligação ao ficheiro App.config
- Clica no botão direito do rato no Editor T-SQL e seleciona Executar . Aparece o diálogo Ligar ao Servidor, introduz a informação de ligação do passo 2 e clica em Ligar
- Para visualizar o esquema gerado, clique com o botão direito no nome da base de dados no SQL Server Object Explorer e selecione Atualizar
Persistir e Recuperar Dados
Abra o ficheiro Program.cs onde o método Main está definido. Adicione o seguinte código à função principal.
O código adiciona dois novos objetos universitários ao contexto. As propriedades espaciais são inicializadas utilizando o método DbGeography.FromText. O ponto de geografia representado como WellKnownText é passado para o método. O código guarda então os dados. Depois, é construída e executada a consulta LINQ que devolve um objeto University cuja localização é a mais próxima da localização especificada.
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);
}
Compilar e executar a aplicação. O programa produz a seguinte saída:
The closest University to you is: School of Fine Art.
Para visualizar dados na base de dados, clique com o botão direito no nome da base de dados no SQL Server Object Explorer e selecione Atualizar. Depois, clique no botão direito do rato na tabela e selecione Ver Dados.
Resumo
Neste walkthrough, analisámos como mapear tipos espaciais usando o Entity Framework Designer e como usar tipos espaciais no código.