Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Mapowanie punktów geoprzestrzennych w płynnym NHibernate

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>()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź zablokowaną tabelę w SQL Server

  2. Co to jest datetime2?

  3. Dla transakcji bez zapisu, która jest tańsza/szybsza:COMMIT czy ROLLBACK?

  4. Wyłączając ograniczenie klucza obcego, nadal nie możesz obciąć tabeli? (Serwer SQL 2005)

  5. Macierz obsługiwanych wersji SQL Server