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支持空間會很棒。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow