我正在使用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]我正在寻找一种解决方法,当我解决问题时,我会发布。
答案 0 :(得分:2)
鉴于Effort不支持像DbGeography这样的特殊属性,tamasflamich说here:
没有现有支持(甚至没有测试版),我不打算很快就开始使用此功能。 遗憾。
我也尝试使用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支持空间会很棒。