Entity Framework - Spatial Data Type
El soporte para tipos espaciales se introdujo en Entity Framework 5. Tambien se incluye un conjunto de operadores para permitir consultas para analizar data espaciales. Por ejemplo, una consulta puede filtrar en funcion de la distancia entre dos ubicaciones geograficas.
-
Entity Framework permitira exponer nuevos tipos de data espaciales como propiedades en sus classs y asignarlos a columnas espaciales en su base de data.
-
Tambien podra escribir consultas LINQ que utilicen operadores espaciales para filtrar, ordenar y agrupar en calculos espaciales realizados en la base de data.
Hay dos tipos principales de data espaciales:
-
El tipo de data geograficos almacena data elipsoidales, por ejemplo, las coordenadas GPS delaltura y longitud.
-
El tipo de data de geometria representa el sistema de coordenadas euclidiano (plano).
Echemos un vistazo al siguiente ejemplo de Cricket Ground.
Paso 1 : cree un nuevo proyecto desde la opcion de menu Archivo → Nuevo → Proyecto.
Paso 2 : en el panel izquierdo, seleccione la aplicacion de consola.
Paso 3 : haga clic con el boton derecho en el nombre del proyecto y seleccione Administrar paquetes NuGet ...
Paso 4 - Instalar Entity Framework.
Paso 5 : agregue una referencia al ensamblado System.Data.Entity y tambien agregue la declaracion System. Data.Spatial using para tipos de data espaciales.
Paso 6 : agregue la siguiente class al archivo Program.cs.
public class CricketGround {ID public int {get; set;} public string Name {have; set;} DbGeography public location {get; set;}}
Paso 7 - Ademas de definir entidades, debe definir una class que se derive de DbContext y exponga las propiedades de DbSet .
En Program.cs, agregue la definicion de contexto.
class publica parcial CricketGroundContext: DbContext {public DbSet CricketGrounds {get; ensemble;}}
Paso 8 : agregue el codigo siguiente en la funcion Main, que agregara dos nuevos objetos CricketGround al contexto.
class Program {static void Main (string args) {using (var context = new CricketGroundContext () ) {context.CricketGrounds.Add (nuevo CricketGround () {Nombre = "Shalimar Cricket Ground ", Ubicacion = DbGeography.FromText ( "POINT (-122.336106 47.605049) "),}); context.CricketGrounds.Add (nuevo CricketGround () {Nombre = "Estadio Marghazar ", Ubicacion = DbGeography .FromText ( "POINT (-122.335197 47.646711) "),}); context.SaveChanges var myLocation = DbGeography.FromText ( "PUNTO (-122.296623 47.640405) "); var cricketGround = (de cg en context.CricketGrounds orderby cg.Location.Distance (myLocation) select cg) .FirstOrDefault Console.WriteLine ( "El campo de cricket mas cercano a ti es: {0}. ", CricketGround.Name); }}}
Las propiedades espaciales se inicializan utilizando el metodo DbGeography.FromText. El punto geografico representado por WellKnownText se pasa al metodo y luego guarda los data. Despues, este objeto de CricketGround se recogera donde su ubicacion sea mas cercana a la ubicacion especificada.
Cuando se ejecuta el codigo anterior, recibira la salidae siguiente -
El campo de cricket mas cercano a usted es el estadio Marghazar
Le recomendamos que ejecute el siguiente ejemplo arriba paso a paso para una mejor comprension.