Używasz Geografii dialektem, ale z niestandardowym typem Geometria na Twoim mapowaniu. Powinieneś użyć niestandardowego typu Geografia . Coś takiego:
public class PlaceMap : ClassMap<Place>
{
public PlaceMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Location).CustomType(typeof(MsSql2008GeographyType)); //for SQL2008
}
}
Jest też coś innego, co być może będziesz musiał zrobić. Jeśli twoja kolumna przestrzenna ma SRID inny niż 0 (zero) i jeśli chcesz pominąć mapowania NH xml, musisz zadeklarować niestandardowy typ, taki jak ten:
public class Wgs84GeographyType : MsSql2008GeographyType
{
protected override void SetDefaultSRID(GeoAPI.Geometries.IGeometry geometry)
{
geometry.SRID = 4326;
}
}
A następnie użyj go na swoim mapowaniu:
public class PlaceMap : ClassMap<Place>
{
public PlaceMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Location).CustomType(typeof(Wgs84GeographyType));
}
}
AKTUALIZACJA:
Powinieneś odwoływać się do NHibernate.Spatial.MsSql2008.dll, a radzę użyć metody Dialect o silnym typie w konfiguracji bazy danych.
.Dialect<MsSql2008GeographyDialect>()