首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate.Spatial.MySQL:空几何学和“无持久器for: GeoAPI.Geometries.IGeometry”错误

NHibernate.Spatial.MySQL:空几何学和“无持久器for: GeoAPI.Geometries.IGeometry”错误
EN

Stack Overflow用户
提问于 2016-04-24 23:55:32
回答 1查看 188关注 0票数 0

我试图使用NHibernate.Spatial.MySQL (4.0.4.4001版)创建一个简单的演示解决方案。解决方案可在这里获得:https://github.com/andrerav/NHibernate.Spatial.MySql.Demo

映射似乎至少适用于插入-- DemoDataImport项目能够读取GeoJSON文件,并将几何图形插入数据库,我可以使用MySQL工作台验证结果。

但是,如果我查询数据,几何图形总是以空值显示。此外,如果我执行这样的查询:

代码语言:javascript
复制
var municipalities = SessionManager.Session.Query<Municipality>()
                        .Where(m => m.Area.Within(county.Area)).ToList();

我得到了一个异常,上面写着“NoPersisterfor: GeoAPI.Geometries.IGeometry”。

有什么不对的吗?

要运行该解决方案,首先创建一个名为mysqldemo的mysql数据库(MySQL5.7或更高版本),其中包含用户名/密码mysqldemo/mysqldemo。DemoDataImport项目将把geojson数据转储到数据库中,DemoQueryUtil项目可以用于执行查询。

制图:

代码语言:javascript
复制
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>();
    }
}

配置:

代码语言:javascript
复制
    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();

    }

示例查询:

代码语言:javascript
复制
var county = SessionManager.Session.Query<County>().First();
EN

回答 1

Stack Overflow用户

发布于 2016-05-02 16:40:03

这个问题是由于缺乏对MySQL 5.7在NHibernate.Spatial.MySQL中的支持所致。我在预发布版的MySQL57SpatialDialect中添加了一个新的NHibernate.Spatial.MySQL,它解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36830256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档