{"id":361,"date":"2012-07-11T17:03:00","date_gmt":"2012-07-11T17:03:00","guid":{"rendered":"https:\/\/staging.infragistics.com\/blogs\/?p=361"},"modified":"2025-02-26T12:27:10","modified_gmt":"2025-02-26T12:27:10","slug":"asp-net-mvc-with-sql-server","status":"publish","type":"post","link":"https:\/\/www.infragistics.com\/blogs\/asp-net-mvc-with-sql-server","title":{"rendered":"Using Spatial Data in ASP.Net MVC with SQL Server"},"content":{"rendered":"\n<p><a style=\"display: none;\" href=\"http:\/\/www.codeproject.com\" rel=\"tag noopener\">CodeProject<\/a>Many developers have been asking since the release of SQL 2008 for support of Spatial data types in the Entity Framework. It was a dream for the Microsoft ORM users to create .NET business applications quickly, using spatial data.&nbsp; In May of this year the release candidate for Entity Framework 5 (EF5) was announced.This version has increased performance when compared to earlier EF version and also has support for spatial types. The Spatial functionality in EF5 requires .NET 4.5.<\/p>\n\n\n\n<p>The Spatial functionality in EF5 requires .NET 4.5. This means you will need Visual Studios 2012 installed. You can download the release candidate for VS 2012 here: <a href=\"http:\/\/www.microsoft.com\/visualstudio\/en-us\" rel=\"noopener\">http:\/\/www.microsoft.com\/visualstudio\/en-us<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"spatial-data-in-the-entity-framework\">Spatial Data in the Entity Framework<\/h2>\n\n\n\n<p>Prior to Entity Framework 5.0 on .NET 4.5 consuming of the data above required using stored procedures or raw SQL commands to access the spatial data. In Entity Framework 5 however, Microsoft introduced the new <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.data.spatial.dbgeometry%28v=vs.110%29.aspx\" rel=\"noopener\">DbGeometry<\/a> and<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.data.spatial.dbgeography%28v=vs.110%29.aspx\" rel=\"noopener\">DbGeography<\/a> types. These immutable location types provide a bunch of functionality for manipulating spatial points using geometry functions which in turn can be used to do common spatial queries like I described in the SQL syntax above.<\/p>\n\n\n\n<p>The DbGeography\/DbGeometry types are immutable, meaning that you can&#8217;t write to them once they&#8217;ve been created. They are a bit odd in that you need to use factory methods in order to instantiate them &#8211; they have no constructor() and you can&#8217;t assign to properties like Latitude and Longitude.<\/p>\n\n\n\n<p>It is important to mention that these types are defined in System.Data.Entity assembly in <a title=\"System.Data.Spatial namespace in MSDN\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.data.spatial(v=vs.110).aspx\" rel=\"noopener\">System.Data.Spatial<\/a> namespace. By now you have probably used types <a title=\"SqlGeometry class\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/microsoft.sqlserver.types.sqlgeometry.aspx\" rel=\"noopener\">SqlGeometry<\/a> and <a title=\"SqlGeography class\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/microsoft.sqlserver.types.sqlgeography.aspx\" rel=\"noopener\">SqlGeography<\/a> types, defined in <a title=\"Microsoft.SqlServer.Types namespace in MSDN\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/microsoft.sqlserver.types.aspx\" rel=\"noopener\">Microsoft.SqlServer.Types<\/a> namespace<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"creating-a-model-with-spatial-data\">Creating a Model with Spatial Data<\/h2>\n\n\n\n<p>Let&#8217;s start by creating a simple Entity Framework model that includes entities from sample databases <a title=\"Northwind sample database\" href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Northwind.zip\">Northwind<\/a> and <a title=\"SpatialDemo sample database\" href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/SpatialDemo.zip\">SpatialDemo<\/a>. The entity named world contains a geom property of type <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.data.spatial.dbgeometry%28v=vs.110%29.aspx\" rel=\"noopener\">DbGeometry<\/a>. Sample is using SQL Server 2012, but you could run it with SQL Server 2008.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]\n[DataMemberAttribute()]\npublic global::System.Data.Spatial.DbGeometry geom\n{\n    get\n    {\n        return _geom;\n    }\n    set\n    {\n        OngeomChanging(value);\n        ReportPropertyChanging(\"geom\");\n        _geom = StructuralObject.SetValidValue(value, true, \"geom\");\n        ReportPropertyChanged(\"geom\");\n        OngeomChanged();\n    }\n }\nprivate global::System.Data.Spatial.DbGeometry _geom;\npartial void OngeomChanging(global::System.Data.Spatial.DbGeometry value);\npartial void OngeomChanged();<\/pre>\n\n\n\n<p>&nbsp;Northwind Entities<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/IgMapEf5SqlSpatial_Pic01.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/2727.IgMapEf5SqlSpatial_5F00_Pic011_5F00_7C86B58D.png\" alt=\" \"\/><\/a><\/figure>\n\n\n\n<p>Sample SpatialDemo database, including spatial data. Table world a filed from Geometry type, named \u201cgeom\u201d. This field&nbsp; contains the contours of countries as polygons<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Mvc4EfSpatialDemo_Pic03.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/0676.Mvc4EfSpatialDemo_5F00_Pic031_5F00_7084C559.png\" alt=\" \"\/><\/a><\/figure>\n\n\n\n<p>Entity world, generated from SpatialDemo database contains a field \u201cgeom\u201d from Geometry type.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/IgMapEf5SqlSpatial_Pic02.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/2543.IgMapEf5SqlSpatial_5F00_Pic021_5F00_0188F33D.png\" alt=\" \"\/><\/a><\/figure>\n\n\n\n<p><strong>ASP.Net MVC 4 Application with Entity Framework 5 RC and Spatial data<\/strong><\/p>\n\n\n\n<p>Now it is&nbsp; a pretty easy to use spatial data in ASP.Net MVC applications.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Controller<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Controller returns a view that contains a dashboard with Infragistics jQuery&nbsp; controls.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region DashboardJs\npublic ActionResult DashboardJs()\n{\n    ViewBag.Message = \"Spatial Data Dashboard\"; \n    return View();\n}\n#endregion \/\/DashboardJs<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spatial Data Maintenance<\/strong><\/li>\n<\/ul>\n\n\n\n<p>When you have a data from DbGeometry \/ DbGeography type you can\u2019t serialize it. There are two options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To convert spatial data type to WKT (Well Known Text) and send it to the client (view) as part of JSON or XML<\/li>\n\n\n\n<li>To use your own classes that could be serialized<\/li>\n<\/ul>\n\n\n\n<p>This sample is demonstrates the second approach<\/p>\n\n\n\n<p><em><strong>CountryByName<\/strong><\/em> method serializes results to JSON to be possible to use it in the view<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region CountryByName\n[OutputCache(VaryByParam = \"countryName\", Duration = 120)]\npublic JsonResult CountryByName(string countryName)\n{\n    switch (countryName)\n    {\n        case \"UK\":\n           countryName = \"United Kingdom\";\n          break;\n        case \"USA\":\n           countryName = \"United States\";\n           break;\n   }\n   var results = spDemo.worlds.Where(x => x.CNTRY_NAME == countryName);\n\n   List ret = new List();\n   foreach (world country in results)\n   {\n        CountryInfo info = new CountryInfo\n        {\n            Id = country.ID,\n            Code = country.CODE,\n           CountryName = country.CNTRY_NAME,\n             Population = country.POP_CNTRY,\n             Extend = GetGeometryBoundary(country)\n        };\n        ret.Add(info);\n   }\n   var retVal = Json(ret, JsonRequestBehavior.AllowGet);\n        return retVal;\n   }\n#endregion \/\/CountryByName<\/pre>\n\n\n\n<p><strong><em>GetGeometryBoundary<\/em><\/strong> is a helper method used to get a list of points, representing an envelope of a DbGeometry instance. Don&#8217;t forget that DbGeometry\/DbGeography point indexes start from 1 !.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region GetGeometryBoundary\npublic static SpatialRect GetGeometryBoundary(world country)\n{\n    List multiPoints = new List();\n    var numPoints = country.geom.Envelope.ElementAt(1).PointCount;\n    for (int i = 1; i &lt;= numpoints=\"\" i=\"\" pre=\"\">\n    {\n        SpatialPoint pnt = new SpatialPoint((double)(country.geom.Envelope.ElementAt(1).PointAt(i).XCoordinate), (double)(country.geom.Envelope.ElementAt(1).PointAt(i).YCoordinate));\n        multiPoints.Add(pnt);\n    }\n    SpatialRect rect = multiPoints.GetBounds();\n      return rect;\n}\n#endregion \/\/GetGeometryBoundary<\/pre>\n\n\n\n<p><strong><em>ContryInfo<\/em><\/strong> is a helper class used to serialize data<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region CountryInfo\npublic class CountryInfo\n{\n    public int Id { get; set; }\n    public string Code { get; set; }\n    public string CountryName { get; set; }\n    public long? Population { get; set; }\n    public SpatialRect Extend { get; set; }\n}\n#endregion \/\/CountryInfo<\/pre>\n\n\n\n<p><strong><em>SpatialPoint<\/em><\/strong> is a helper class to keep a point data. You could use:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region SpatialPoint\n \npublic class SpatialPoint\n{\n   public SpatialPoint(double x, double y)\n   {\n       this.X = x;\n       this.Y = y;\n   } \n   public double X { get; set; }\n   public double Y { get; set; }\n} \n#endregion \/\/SpatialPoint<\/pre>\n\n\n\n<p><strong><em>SpatialRect<\/em><\/strong> is a helper class to keep an extend of the country<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region SpatialRect\n \npublic struct SpatialRect\n{\n    public SpatialRect(double pLeft, double pTop, double pWidth, double pHeight)\n   {\n       left = pLeft;\n       top = pTop;\n       width = pWidth;\n       height = pHeight;\n   }  \n   public double left; \n   public double top; \n   public double width; \n   public double height; \n}  \n#endregion \/\/SpatialRect<\/pre>\n\n\n\n<p><strong><em>GetBounds<\/em><\/strong> is an extension method used to get a boundary of the list of points.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#region Extensions\npublic static class Extensions\n{\n    #region GetBounds\n    public static SpatialRect GetBounds(this IList points)\n    {\n       double xmin = Double.PositiveInfinity;\n       double ymin = Double.PositiveInfinity;\n       double xmax = Double.NegativeInfinity;\n       double ymax = Double.NegativeInfinity;\n\n       SpatialPoint p;\n       for (var i = 0; i &lt; points.Count; i++)\n       {\n         p = points[i];\n         xmin = Math.Min(xmin, p.X);\n         ymin = Math.Min(ymin, p.Y);\n         xmax = Math.Max(xmax, p.X);\n         ymax = Math.Max(ymax, p.Y);\n       }\n       if (Double.IsInfinity(xmin) || Double.IsInfinity(ymin) || Double.IsInfinity(ymin) || Double.IsInfinity(ymax))\n       {\n          return new SpatialRect(0.0, 0.0, 0.0, 0.0);\n       }\n       return new SpatialRect(xmin, ymin, xmax - xmin, ymax - ymin);\n   }\n   #endregion \/\/GetBounds\n} \n#endregion \/\/Extensions<\/pre>\n\n\n\n<p><strong>View<\/strong><\/p>\n\n\n\n<p>The view presents a dashboard from Infragistics jQuery Grid, Chart and Map.<\/p>\n\n\n\n<p>The most important part in the sample is how to query the controller\u2019s method that returns spatial data (the country extend in this case).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var countryUrl = \"\/Home\/CountryByName?countryName=\" + args.row.element[0].cells[1].textContent\n \n...\n \n$.getJSON(countryUrl,\n  function (json, text) {\n      $.each(json, function (index, value) {\n         var country = value;\n         var extend = country[\"Extend\"];\n         var zoom = $(\"#map\").igMap(\"getZoomFromGeographic\", extend);\n         $(\"#map\").igMap(\"option\", \"windowRect\", zoom);\n      });\n });<\/pre>\n\n\n\n<p>Infragistics jQuery Map instance definition.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(\"#map\").igMap({\n     width: \"500px\",\n     height: \"500px\",\n     panModifier: \"control\",\n     horizontalZoomable: true,\n     verticalZoomable: true,\n     windowResponse: \"immediate\",\n     overviewPlusDetailPaneVisibility: \"visible\",\n     seriesMouseLeftButtonUp: function (ui, args) {\n     var tets = args;\n    }\n});<\/pre>\n\n\n\n<p>&nbsp;Infragistics jQuery Grid with zoom around the selected customer\u2019s country.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$('#grid').igGrid({\n     virtualization: false, height: 280, width: 650,\n     dataSource: \"\/Home\/Customers\",\n     autoGenerateColumns: false,\n     columns: [\n        { headerText: \"Customer ID\", key: \"CustomerID\", width: \"120px\", dataType: \"string\" },\n        { headerText: \"Country\", key: \"Country\", width: \"150px\", dataType: \"string\" },\n        { headerText: \"City\", key: \"City\", dataType: \"string\" },\n        { headerText: \"Contact Name\", key: \"ContactName\", dataType: \"string\" },\n        {headerText: \"Phone\", key: \"Phone\", dataType: \"string\" }\n     ],\n     features: \n     [{\n       name: 'Selection',\n       mode: 'row',\n       multipleSelection: false,\n       rowSelectionChanged: function (ui, args) {\n       $(\"#chart\").igDataChart({\n          dataSource: \"\/Home\/Orders?userID=\" + args.row.element[0].cells[0].textContent\n       });\n\n       selected = args.row.element[0].cells[0].textContent; \/\/keep track of selected user\n       var countryUrl = \"\/Home\/CountryByName?countryName=\" + args.row.element[0].cells[1].textContent\n       $.getJSON(countryUrl,\n       function (json, text) {\n            $.each(json, function (index, value) {\n                   var country = value;\n                   var extend = country[\"Extend\"];\n                   var zoom = $(\"#map\").igMap(\"getZoomFromGeographic\", extend);\n                   $(\"#map\").igMap(\"option\", \"windowRect\", zoom);\n             });\n        });\n        }\n      }\n     ,  \n   {\n        name: 'Sorting',\n        type: \"remote\"\n   },\n   {\n        name: 'Paging',\n        type: \"local\",\n        pageSize: 10\n   }] \n})<\/pre>\n\n\n\n<p>&nbsp;<strong>Spatial Data in Action<\/strong><\/p>\n\n\n\n<p>Run the application and select the \u201cSpatial Data Dashboard\u201d from the menu.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Mvc4EfSpatialDemo_Pic04.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/8816.Mvc4EfSpatialDemo_5F00_Pic041_5F00_4EB8ECC8.png\" alt=\" Run the application and select the \u201cSpatial Data Dashboard\u201d from the menu 1\" title=\"Run the application and select the \u201cSpatial Data Dashboard\u201d from the menu 1\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Mvc4EfSpatialDemo_Pic05.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/0181.Mvc4EfSpatialDemo_5F00_Pic051_5F00_6D8F60A6.png\" alt=\" Run the application and select the \u201cSpatial Data Dashboard\u201d from the menu 2\" title=\"Run the application and select the \u201cSpatial Data Dashboard\u201d from the menu 2\"\/><\/a><\/figure>\n\n\n\n<p>Choose a customer from the igGrid and see how the map shows the country from which the client<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Mvc4EfSpatialDemo_Pic07.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/0160.Mvc4EfSpatialDemo_5F00_Pic071_5F00_05B2CB02.png\" alt=\"Choose a customer from the igGrid and see how the map shows the country from which the client \" title=\"Choose a customer from the igGrid and see how the map shows the country from which the client\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Mvc4EfSpatialDemo_Pic08.png\"><img decoding=\"async\" src=\"\/community\/cfs-file\/__key\/CommunityServer.Blogs.Components.WeblogFiles\/mihail_5F00_mateev.metablogapi\/4214.Mvc4EfSpatialDemo_5F00_Pic081_5F00_6FE8E2A4.png\" alt=\" Choose a customer from the igGrid and see how the map shows the country from which the client 2\" title=\"Choose a customer from the igGrid and see how the map shows the country from which the client 2\"\/><\/a><\/figure>\n\n\n\n<p>You can download source code of the sample <a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Mvc4EfSpatialDemo.zip\">here<\/a>.<\/p>\n\n\n\n<p>To run this sample you could download <a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/Northwind.zip\">Northwind<\/a> and <a href=\"http:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/IgMapEf5SqlSpatial\/SpatialDemo.zip\">SpatialDemo<\/a> sample databases<\/p>\n\n\n\n<p>As always, you can follow us on Twitter: <a href=\"https:\/\/twitter.com\/#!\/mihailmateev\" rel=\"noopener\">@mihailmateev<\/a> and <a href=\"https:\/\/twitter.com\/#!\/infragistics\" rel=\"noopener\">@Infragistics<\/a> , all tweets with hashtag #infragistcs and stay in touch on <a href=\"https:\/\/www.facebook.com\/infragistics\" rel=\"noopener\">Facebook<\/a>, <a href=\"https:\/\/plus.google.com\/110651137371189140377\/posts\" rel=\"noopener\">Google+<\/a> , <a href=\"http:\/\/www.linkedin.com\/company\/16069\" rel=\"noopener\">LinkedIn<\/a> and <a href=\"https:\/\/www.facebook.com\/groups\/infragisticsfriends\/\" rel=\"noopener\">Infragistics Friends User Group<\/a> !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the highly-anticipated features\u00a0 in the Entity Framework 5 is a Spatial support.<\/p>\n","protected":false},"author":154,"featured_media":2368,"comment_status":"publish","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-361","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to"],"_links":{"self":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/users\/154"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/comments?post=361"}],"version-history":[{"count":3,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/361\/revisions"}],"predecessor-version":[{"id":2527,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/361\/revisions\/2527"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media\/2368"}],"wp:attachment":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media?parent=361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/categories?post=361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/tags?post=361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}