2016-04-24 41 views
0

我試圖創建一個簡單的演示解決方案使用NHibernate.Spatial.MySQL(版本4.0.4.4001)。該解決方案可以在這裏找到:https://github.com/andrerav/NHibernate.Spatial.MySql.DemoNHibernate.Spatial.MySQL:空幾何和「沒有persister爲:GeoAPI.Geometries.IGeometry」錯誤

的映射似乎至少爲嵌入式工作 - DemoDataImport項目是能夠讀取GeoJSON的文件,並插入幾何到數據庫中,我可以確認使用MySQL Workbench中的結果。

但是,如果我查詢數據,幾何總是顯示空值。此外,如果我執行查詢像這樣:

var municipalities = SessionManager.Session.Query<Municipality>() 
         .Where(m => m.Area.Within(county.Area)).ToList(); 

我得到那個說「沒有留存爲:GeoAPI.Geometries.IGeometry」異常。

任何想法可能是錯的?

要運行該溶液中,首先創建一個MySQL數據庫(MySQL的5.7或更高版本)稱爲mysqldemo與用戶名/密碼mysqldemo/mysqldemo。 DemoDataImport項目會將geojson數據轉儲到數據庫中,並且可以使用DemoQueryUtil項目執行查詢。

映射:

public class Municipality 
{ 
    public virtual int Id { get; set; } 
    public virtual County County { get; set; } 
    public virtual string Name { get; set; } 
    public virtual int MunicipalityNo { get; set; } 
    public virtual IGeometry Area { get; set; } 
} 

public class MunicipalityMap : ClassMap<Municipality> 
{ 
    public MunicipalityMap() 
    { 
     ImportType<IGeometry>(); 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.MunicipalityNo); 
     Map(x => x.Area).CustomType<MySQLGeometryType>(); 
     References(x => x.County).Nullable(); 
    } 
} 

public class County 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual int CountyNo { get; set; } 
    public virtual IGeometry Area { get; set; } 
    public virtual List<Municipality> Municipalities { get; set; } 

} 

public class CountyMap : ClassMap<County> 
{ 
    public CountyMap() 
    { 
     ImportType<IGeometry>(); 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.CountyNo); 
     Map(x => x.Area).CustomType<MySQLGeometryType>(); 
    } 
} 

配置:

public static void Configure(bool generateTables = false) 
    { 
     var cfg = Fluently.Configure() 
      .Database(FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard 
      .ConnectionString(c => c.FromConnectionStringWithKey("MySQL")) 
      .Driver<MySqlDataDriver>() 
      .ShowSql() 
      .Dialect<MySQLSpatialDialect>()) 
      .Mappings(x => x.FluentMappings.AddFromAssemblyOf<MunicipalityMap>()) 
      .BuildConfiguration(); 

     cfg.AddAuxiliaryDatabaseObject(new SpatialAuxiliaryDatabaseObject(cfg)); 

     if (generateTables) 
     { 
      var exporter = new SchemaExport(cfg); 
      exporter.Drop(false, true); 
      exporter.Create(true, true); 
     } 

     SessionManager.SessionFactory = cfg.BuildSessionFactory(); 

    } 

例子查詢:

var county = SessionManager.Session.Query<County>().First(); 
+0

在有人投入大量時間之前,我找到了根本原因。 MySQL 5.7引入了一些與NHibernate.Spatial.MySQL不兼容的更改。我已經寫了一個概念性的修補程序,並且會在NuGet上快速地發佈並執行這個操作。當發生這種情況時,我會在這篇文章中添加一個答案,並說明如何使用新的方言。 – andrerav

回答

相關問題