1

我正在使用 EF6 开发应用程序,我决定将 System.Data.Entity.Spatial.DbGeography 用于我的位置,如下所示

public class Place
{
  public int Id { get; set; }
  public string Name { get; set; }
  public DbGeography Location { get; set; }
} 

当我运行测试时,出现以下错误

System.NotImplementedException : No usable spatial provider could be found. In order to use the 'DbGeography' or 'DbGeometry' spatial types the EF provider being used must support spatial types and all prerequisites for the provider must be installed.

PS:我正在使用Effort进行测试。

任何建议都会有所帮助,谢谢。


2015 年 3 月 4 日编辑:

错误在于努力。它不支持空间属性 [DbGeography] 我正在寻找一种解决方法,我将在解决问题时发布。

更多信息:https ://efort.codeplex.com/discussions/471666

4

1 回答 1

2

鉴于 Effort 不支持像 DbGeography 这样的特殊属性,并且 tamasflamich在这里说:

没有现有的支持(甚至没有测试版),我不打算很快开始研究这个功能。对不起。

我也尝试使用Highway.Data但它都不支持。

它现在不支持,也永远不会支持 AdvancedQuery、AdvancedCommand 或 AdvancedScalar。

我浏览了我的代码并注意到我只需要一个盒子内的位置,然后我决定停止使用 DbGeography 并自己做,如下所示:

public class Place
{
  public int Id { get; set; }
  public string Name { get; set; }
  public double Lat { get; set; }
  public double Lng { get; set; }
}

代替:

public IEnumerable<Church> GetInBox(DbGeography boundingBox)
{
  return All().Where(c => c.Location.Intersects(boundingBox));
}

现在我有这个:

public IEnumerable<Church> GetInBox(DbGeography boundingBox)
{
  All().Where(c =>
            c.Lat <= nelt &&
            c.Lat >= swlt &&
            c.Lng <= nelng &&
            c.Lng >= swlng
            );
}

这解决了我的问题,但如果 Effort 和 HighwayFramework 支持空间,那就太好了。

于 2015-03-04T20:04:22.137 回答