Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Geodatenpunktkartierung in Fluent NHibernate

Sie verwenden eine Geografie Dialekt, aber unter Verwendung eines benutzerdefinierten Typs von Geometry auf deinem Mapping. Sie sollten einen benutzerdefinierten Typ von Geographie verwenden . Etwas wie:

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

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

Außerdem gibt es noch etwas, das Sie möglicherweise tun müssen. Wenn Ihre Spatial-Spalte eine andere SRID als 0 (Null) hat und Sie NH-XML-Zuordnungen überspringen möchten, müssen Sie einen benutzerdefinierten Typ wie diesen deklarieren:

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

Und verwenden Sie es dann in Ihrem Mapping:

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

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

AKTUALISIERUNG:

Sie sollten auf NHibernate.Spatial.MsSql2008.dll verweisen, und ich würde Ihnen raten, die stark typisierte Dialekt-Methode in Ihrer Datenbankkonfiguration zu verwenden.

.Dialect<MsSql2008GeographyDialect>()