Espacial: diseñador de EF

Nota:

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

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

En este tutorial se usará Model First para crear una base de datos, pero el diseñador de EF también se puede usar con el flujo de trabajo Database First para asignar a 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, deberá tener como destino .NET Framework 4.5. Visual Studio 2012 usa .NET 4.5 de forma predeterminada.

Para usar tipos de datos espaciales, también es necesario 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 geografía almacena datos elipsoidales (por ejemplo, las coordenadas de latitud y longitud del sistema GPS). El tipo de datos geometría representa el sistema de coordenadas Euclidianas (plano).

Ver el vídeo

En este vídeo se muestra cómo asignar tipos espaciales con el diseñador de Entity Framework. También se 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. Abra Visual Studio 2012
  2. En el menú Archivo, elija Nuevo y haga clic en Proyecto
  3. En el panel izquierdo, haga clic en Visual C# y, luego, seleccione la plantilla Consola
  4. Escriba SpatialEFDesigner como nombre del proyecto y haga clic en Aceptar

Creación de un nuevo modelo mediante el diseñador de EF

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto, seleccione Agregar y, luego, haga clic en Nuevo elemento
  2. Seleccione Datos en el menú izquierdo y, luego, elija Entity Data Model de ADO.NET en el panel Plantillas
  3. Escriba UniversityModel.edmx como nombre de archivo y, luego, haga clic en Agregar
  4. En la página Asistente de Entity Data Model, seleccione Modelo vacío en el cuadro de diálogo Elegir contenido del modelo
  5. Haga clic en Finish (Finalizar).

Se muestra el diseñador de Entity, que proporciona una superficie de diseño para modificar el modelo.

El asistente realiza las siguientes acciones:

  • Genera el archivo EnumTestModel.edm, que define el modelo conceptual, el modelo de almacenamiento y la asignación entre ellos. Establece la propiedad Metadata Artifact Processing del archivo .edmx en Insertar en el ensamblado de salida para que los archivos de metadatos generados se inserten en el ensamblado.
  • Agrega una referencia a los siguientes ensamblados: EntityFramework, System.ComponentModel.DataAnnotations y System.Data.Entity.
  • Crea los archivos UniversityModel.tt y UniversityModel.Context.tt y los agrega en el archivo .edmx. Estos archivos de plantilla T4 generan el código que define el tipo derivado DbContext y los tipos POCO que se asignan a las entidades del modelo .edmx

Agregar un nuevo tipo de entidad

  1. Haga clic con el botón derecho en un área vacía de la superficie de diseño, seleccione Agregar -> Entidad. Aparecerá el cuadro de diálogo Nueva entidad
  2. Especifique University para el nombre de tipo y especifique UniversityID, mientras que para el nombre de la propiedad de clave, deje el tipo como Int32
  3. Haga clic en Aceptar
  4. Haga clic con el botón derecho en la entidad y seleccione Agregar nueva -> Propiedad escalar
  5. Cambie el nombre de la nueva propiedad a Name
  6. Agregue otra propiedad escalar y cámbiela por Location. Abra la ventana Propiedades y cambie el tipo de la nueva propiedad a Geography
  7. Guarde el modelo y compile el proyecto

    Nota:

    Cuando construya, podrían aparecer advertencias sobre entidades y asociaciones desasignadas en la Lista de errores. Es posible ignorar estas advertencias, porque después de elegir generar la base de datos a partir del modelo, los errores desaparecerán.

Generar base de datos a partir del modelo

Ahora podemos generar una base de datos basada en el modelo.

  1. Haga clic con el botón derecho del ratón en un espacio vacío de la superficie del diseñador de Entity y seleccione Generar base de datos a partir del modelo
  2. Se muestra el cuadro de diálogo Elegir la conexión de datos del Asistente para generar base de datos. Haga clic en el botón Nueva conexión, especifique (localdb)\mssqllocaldb para el nombre del servidor y University para la base de datos, y haga clic en Aceptar
  3. Aparecerá un cuadro de diálogo preguntando si desea crear una nueva base de datos. Haga clic en .
  4. Haga clic en Siguiente y el Asistente de creación de bases de datos generará un lenguaje de definición de datos (DDL) para crear una base de datos. El DDL generado se mostrará en el cuadro de diálogo Resumen y configuración. Tenga en cuenta que el DDL no contiene definiciones para tablas que se asignen al tipo de enumeración
  5. Haga clic en Finalizar. Hacer clic en Finalizar no ejecuta el script DDL.
  6. El Asistente para crear bases de datos hace lo siguiente: Abre UniversityModel.edmx.sql en el Editor de T-SQL, genera las secciones de esquema de almacén y asignación del archivo EDMX y agrega información de cadena de conexión al archivo App.config
  7. Haga clic en el botón derecho del mouse en el Editor de T-SQL y seleccione Ejecutar. Aparecerá el cuadro de diálogo Conectar al servidor y, a continuación, escriba la información de conexión del paso 2 y haga clic en Conectar
  8. Para ver el esquema generado, haga clic con el botón derecho en el nombre de la base de datos en el Explorador de objetos de SQL Server y seleccione Actualizar

Conservar y recuperar datos

Abra el archivo Program.cs donde se define el método Main. Agregue el código siguiente 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, se construye y ejecuta la consulta LINQ que devuelve un objeto University cuya ubicación es la más cercana a la 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);
}

Compile y ejecute la aplicación. El programa produce el siguiente resultado:

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

Para ver los datos de la base de datos, haga clic con el botón derecho en el nombre de la base de datos en el Explorador de objetos de SQL Server y seleccione Actualizar. A continuación, haga clic en el botón derecho del mouse de la tabla y seleccione Ver datos.

Resumen

En este tutorial hemos visto cómo asignar tipos espaciales mediante el diseñador de Entity Framework y cómo usar tipos espaciales en el código.