Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Mapeamento de pontos geoespaciais no Fluent NHibernate


Você está usando uma Geografia dialeto, mas usando um CustomType de Geometria em seu mapeamento. Você deve usar um tipo personalizado de Geografia . 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
    }
}

Além disso, há outra coisa que você pode precisar fazer. Se sua coluna espacial tiver um SRID diferente de 0 (zero) e se você quiser pular mapeamentos xml NH, precisará declarar um tipo personalizado como este:
public class Wgs84GeographyType : MsSql2008GeographyType
{
    protected override void SetDefaultSRID(GeoAPI.Geometries.IGeometry geometry)
    {
        geometry.SRID = 4326;
    }
}

E, em seguida, use-o em seu mapeamento:
public class PlaceMap : ClassMap<Place>
{
    public PlaceMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);

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

ATUALIZAÇÃO:

Você deve fazer referência ao NHibernate.Spatial.MsSql2008.dll, e eu aconselho você a usar o método de dialeto fortemente tipado na configuração do banco de dados.
.Dialect<MsSql2008GeographyDialect>()