Eccezione di DbGeography Spatial Provider con Effort.EF6 [Impossibile trovare provider spaziali utilizzabili.]

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

Domanda

Sto sviluppando un'applicazione con EF6 e ho deciso di utilizzare System.Data.Entity.Spatial.DbGeography per le mie posizioni come segue

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

Quando eseguo i miei test ottengo il seguente errore

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: sto usando Effort per i miei test.

Qualsiasi suggerimento sarebbe utile, grazie.


Modificato il 03/04/15:

L'errore è con lo sforzo. Non supporta le proprietà spaziali [DbGeography] Sto cercando una soluzione alternativa che pubblicherò quando ho risolto il problema.

Maggiori informazioni: https://effort.codeplex.com/discussions/471666

Risposta accettata

Dato che lo sforzo non supporta proprietà speciali come DbGeography e tamasflamich dice qui :

Non esiste un supporto esistente (nemmeno beta) e non ho intenzione di iniziare a lavorare su questa funzione in qualsiasi momento. Scusate.

Ho anche provato ad usare Highway.Data ma non supporta neanche.

Ora non supporta né AdvancedQuery, AdvancedCommand o AdvancedScalar.

Ho letto il mio codice e ho notato che ho solo bisogno delle posizioni all'interno di una scatola, quindi ho deciso di smettere di usare DbGeography e di farlo da solo, come segue:

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

Invece di:

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

Ora ho questo:

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

Questo ha risolto il mio problema, ma sarebbe stato grandioso che lo sforzo e il framework Highway supportassero spazialmente.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché