Effort.EF6的Spatial DbGeography Provider异常[找不到可用的空间提供者。]

asp.net-mvc c# effort entity-framework-6 spatial

我正在使用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年4月3日编辑:

错误是Effort。它不支持空间属性[DbGeography]我正在寻找一种解决方法,当我解决问题时,我会发布。

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

一般承认的答案

鉴于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支持空间会很棒。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因