sql >> Base de Datos >  >> RDS >> Sqlserver

Mapeo de puntos geoespaciales en Fluent NHibernate

Estás usando una geografía dialecto pero usando un CustomType de Geometry en su mapeo. Debe usar un tipo personalizado de Geografía . Algo como:

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

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

Además, hay algo más que quizás debas hacer. Si su columna espacial tiene un SRID diferente de 0 (cero) y si desea omitir las asignaciones xml de NH, deberá declarar un tipo personalizado como este:

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

Y luego úsalo en tu mapeo:

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

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

ACTUALIZACIÓN:

Debería hacer referencia a NHibernate.Spatial.MsSql2008.dll, y le recomendaría que use el método Dialecto fuertemente tipado en la configuración de su base de datos.

.Dialect<MsSql2008GeographyDialect>()