Räumliche DbGeography-Provider-Ausnahme mit Effort.EF6 [Es konnte kein verwendbarer räumlicher Anbieter gefunden werden.]

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

Frage

Ich entwickle eine Anwendung mit EF6 und ich entschied mich, System.Data.Entity.Spatial.DbGeography für meine Standorte wie folgt zu verwenden

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

Wenn ich meine Tests starte, erhalte ich den folgenden Fehler

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: Ich verwende Effort für meine Tests.

Jeder Vorschlag wäre hilfreich, danke.


Bearbeitet 03/04/15:

Der Fehler ist mit Aufwand. Es unterstützt keine räumlichen Eigenschaften [DbGeography] Ich suche nach einem Workaround, den ich bei der Lösung des Problems veröffentlichen werde.

Weitere Informationen finden Sie unter https://effort.codeplex.com/discussions/471666

Akzeptierte Antwort

Vorausgesetzt, dass Effort spezielle Eigenschaften wie DbGeography und Tamasflamich nicht unterstützt, heißt es hier :

Es gibt keine Unterstützung (nicht einmal Beta) und ich werde nicht bald mit der Arbeit an diesem Feature beginnen. Es tut uns leid.

Ich habe auch versucht, Highway.Data zu verwenden, aber es unterstützt auch nicht.

Es unterstützt jetzt weder AdvancedQuery noch AdvancedCommand oder AdvancedScalar.

Ich habe meinen Code durchgesehen und festgestellt, dass ich nur die Positionen in einer Box benötige. Dann habe ich beschlossen, die Verwendung von DbGeography einzustellen und sie wie folgt selbst durchzuführen:

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

Anstatt von:

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

Jetzt habe ich das:

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

Dies löste mein Problem, wäre aber toll, dass Aufwand und HighwayFramework räumlich unterstützen.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum