Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Cartographie de points géospatiaux dans Fluent NHibernate

Vous utilisez une Géographie dialecte mais en utilisant un CustomType de Geometry sur votre cartographie. Vous devez utiliser un type personnalisé de Géographie . Quelque chose comme :

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

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

De plus, il y a autre chose que vous devrez peut-être faire. Si votre colonne spatiale a un SRID différent de 0 (zéro) et si vous souhaitez ignorer les mappages XML NH, vous devrez déclarer un type personnalisé comme celui-ci :

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

Et utilisez-le ensuite sur votre mappage :

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

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

MISE À JOUR :

Vous devriez faire référence à NHibernate.Spatial.MsSql2008.dll, et je vous conseille d'utiliser la méthode Dialect fortement typée dans la configuration de votre base de données.

.Dialect<MsSql2008GeographyDialect>()