Comparteix a través de


Espacial: código primero

Nota:

Solo ef5 y versiones posteriores : las características, las API, etc. que se describen en esta página se introdujeron en Entity Framework 5. Si usa una versión anterior, no se aplica parte o toda la información.

En el vídeo y en el tutorial paso a paso se muestra cómo asignar tipos espaciales con Entity Framework Code First. También muestra cómo usar una consulta LINQ para buscar una distancia entre dos ubicaciones.

En este tutorial se usará Code First para crear una nueva base de datos, pero también puede usar Code First en una base de datos existente.

La compatibilidad con tipos espaciales se introdujo en Entity Framework 5. Tenga en cuenta que para usar las nuevas características, como el tipo espacial, las enumeraciones y las funciones con valores de tabla, debe tener como destino .NET Framework 4.5. Visual Studio 2012 tiene como destino .NET 4.5 de forma predeterminada.

Para usar tipos de datos espaciales, también debe usar un proveedor de Entity Framework que tenga compatibilidad espacial. Para obtener más información, consulte compatibilidad de proveedores con tipos espaciales .

Hay dos tipos de datos espaciales principales: geografía y geometría. El tipo de datos *geography* almacena datos elipsoidales (por ejemplo, coordenadas de latitud y longitud GPS). El tipo de dato geometry representa el sistema de coordenadas euclidiano (plano).

Vea el vídeo

En este vídeo se muestra cómo asignar tipos espaciales con Entity Framework Code First. También muestra cómo usar una consulta LINQ para buscar una distancia entre dos ubicaciones.

Presentado por: Julia Kornich

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

Requisitos previos

Tendrá que tener instalada la edición Visual Studio 2012, Ultimate, Premium, Professional o Web Express para completar este tutorial.

Configuración del proyecto

  1. Abrir Visual Studio 2012
  2. En el menú Archivo, apunte a Nuevo, y a continuación, haga clic en Proyecto.
  3. En el panel izquierdo, haga clic en Visual C# y, a continuación, seleccione la plantilla Consola .
  4. Escriba SpatialCodeFirst como nombre del proyecto y haga clic en Aceptar.

Definir un nuevo modelo mediante Code First

Al usar el desarrollo de Code First, normalmente comienza escribiendo clases de .NET Framework que definen el modelo conceptual (dominio). El código siguiente define la clase Universidad.

La Universidad tiene la propiedad Location del tipo DbGeography. Para usar el tipo DbGeography, debe agregar una referencia al ensamblado System.Data.Entity y agregar también la instrucción using System.Data.Spatial.

Abra el archivo Program.cs y pegue las siguientes instrucciones using en la parte superior del archivo:

using System.Data.Spatial;

Agregue la siguiente definición de clase University al archivo Program.cs.

public class University  
{
    public int UniversityID { get; set; }
    public string Name { get; set; }
    public DbGeography Location { get; set; }
}

Definir el tipo derivado de DbContext

Además de definir entidades, debe definir una clase que derive de DbContext y exponga las propiedades TEntity< de DbSet>. Las propiedades de DbSet<TEntity> permiten al contexto saber qué tipos desea incluir en el modelo.

Una instancia del tipo derivado DbContext administra los objetos de entidad durante el tiempo de ejecución, lo que incluye rellenar objetos con datos de una base de datos, seguimiento de cambios y conservación de datos en la base de datos.

Los tipos DbContext y DbSet se definen en el ensamblado EntityFramework. Agregaremos una referencia a este archivo DLL mediante el paquete NuGet EntityFramework.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto.
  2. Seleccione Administrar paquetes NuGet...
  3. En el cuadro de diálogo Administrar paquetes NuGet, seleccione la pestaña En línea y elija el paquete EntityFramework .
  4. Haz clic en Instalar

Tenga en cuenta que, además del ensamblado EntityFramework, también se agrega una referencia al ensamblado System.ComponentModel.DataAnnotations.

En la parte superior del archivo Program.cs, agregue la siguiente instrucción using:

using System.Data.Entity;

En el Program.cs agregue la definición de contexto. 

public partial class UniversityContext : DbContext
{
    public DbSet<University> Universities { get; set; }
}

Conservar y recuperar datos

Abra el archivo Program.cs donde se define el método Main. Agregue el siguiente código a la función Main.

El código agrega dos nuevos objetos University al contexto. Las propiedades espaciales se inicializan mediante el método DbGeography.FromText. El punto geográfico representado como WellKnownText se pasa al método. A continuación, el código guarda los datos. A continuación, la consulta LINQ que devuelve un objeto University donde su ubicación está más cercana a la ubicación especificada, se construye y ejecuta.

using (var context = new UniversityContext ())
{
    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 y ejecute la aplicación. El programa produce el siguiente resultado:

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

Visualización de la base de datos generada

Al ejecutar la aplicación por primera vez, Entity Framework crea una base de datos automáticamente. Dado que tenemos Instalado Visual Studio 2012, la base de datos se creará en la instancia de LocalDB. De forma predeterminada, Entity Framework asigna un nombre a la base de datos después del nombre completo del contexto derivado (en este ejemplo que es SpatialCodeFirst.UniversityContext). Las veces posteriores se usará la base de datos existente.  

Tenga en cuenta que, si realiza algún cambio en el modelo después de crear la base de datos, debe usar Migraciones de Code First para actualizar el esquema de la base de datos. Consulte Code First to a New Database para obtener un ejemplo del uso de Migraciones.

Para ver la base de datos y los datos, haga lo siguiente:

  1. En el menú principal de Visual Studio 2012, seleccione Ver ->Explorador de objetos de SQL Server.
  2. Si LocalDB no está en la lista de servidores, haga clic en el botón derecho del mouse en SQL Server y seleccione Agregar SQL Server Use the default Windows Authentication to connect to the LocalDB instance (Usar la autenticación de Windows predeterminada para conectarse a la instancia de LocalDB).
  3. Expandir el nodo LocalDB
  4. Desarrolle la carpeta Bases de datos para ver la nueva base de datos y vaya a la tabla Universidades .
  5. Para ver los datos, haga clic con el botón derecho en la tabla y seleccione Ver datos.

Resumen

En este tutorial hemos visto cómo usar tipos espaciales con Entity Framework Code First.