Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Mappatura geospaziale dei punti in Fluent NHibernate

Stai utilizzando una Geografia dialetto ma utilizzando un CustomType di Geometry sulla tua mappatura. Dovresti utilizzare un tipo personalizzato di Geografia . Qualcosa come:

public class PlaceMap : ClassMap<Place>
{
    public PlaceMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);

        Map(x => x.Location).CustomType(typeof(MsSql2008GeographyType)); //for SQL2008
    }
}

Inoltre, c'è qualcos'altro che potresti dover fare. Se la tua colonna spaziale ha un SRID diverso da 0 (zero) e se vuoi saltare i mapping NH xml, dovrai dichiarare un tipo personalizzato come questo:

public class Wgs84GeographyType : MsSql2008GeographyType
{
    protected override void SetDefaultSRID(GeoAPI.Geometries.IGeometry geometry)
    {
        geometry.SRID = 4326;
    }
}

E poi usalo sulla tua mappatura:

public class PlaceMap : ClassMap<Place>
{
    public PlaceMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);

        Map(x => x.Location).CustomType(typeof(Wgs84GeographyType));
    }
}

AGGIORNAMENTO:

Dovresti fare riferimento a NHibernate.Spatial.MsSql2008.dll e ti consiglierei di usare il metodo Dialect fortemente tipizzato nella configurazione del tuo database.

.Dialect<MsSql2008GeographyDialect>()