Asp.MVC + AR + Spatial NHibernate

时间:2011-06-20 23:25:22

标签: asp.net-mvc nhibernate activerecord

我正在尝试的测试应用中进行以下设置:

  1. ASP.MVC
  2. Castle ActiveRecord
  3. NHibernate Spatial
  4. PostGIS的
  5. 我知道一开始有点复杂,但这是交易。我有一个正常工作的控制器,我有我的模型。他们住在另一个项目中,但是在同一个解决方案中。两者的代码都是可访问的。

    我有一个简单的用户模型,BTW,没有任何空间。我有一个使用Point的模型,但此视图和操作不处理此数据。

    这是一个例外:

    NHibernateMappingException {“被调用的构造函数抛出异常。”}

    InnerEx:{“已声明GeometryType列,但未配置空间方言”}

    看起来这是我第一次调试(或前几次),我得到一个例外,告诉我没有找到空间方言。这很奇怪。让我们看一些代码:

    这是我的应用启动方法:

        protected void Application_Start()
        {
            Ignition.StartActiveRecord();
    
            AreaRegistration.RegisterAllAreas();
    
            RegisterRoutes(RouteTable.Routes);
        }
    

    这是Ignition.StartActiveRecord:

        public static void StartActiveRecord()
        {
            XmlConfigurationSource source = new XmlConfigurationSource(@"path.xml");
            ActiveRecordStarter.Initialize(source, GetActiveRecordTypes());
    
            foreach (Configuration cfg in ActiveRecordMediator.GetSessionFactoryHolder().GetAllConfigurations())
            {
                cfg.AddAuxiliaryDatabaseObject(new SpatialAuxiliaryDatabaseObject(cfg));
                //Metadata.AddMapping(cfg, MetadataClass.GeometryColumn);
                //Metadata.AddMapping(cfg, MetadataClass.SpatialReferenceSystem);
            }
        }
    

    我的网络项目包含对所有需要的库的引用:

    • NHibernate的
    • ActiveRecord的
    • NHibernate Spatial
    • NHibernate Spatial(PostGIS)

    帮助!?这非常烦人,我无法在生产环境中想象这一点!

    谢谢!

1 个答案:

答案 0 :(得分:0)

异常消息是“已声明了GeometryType列,但未配置空间方言”。这意味着......您需要配置PostGIS方言:)

<add key="dialect" value="NHibernate.Spatial.Dialect.PostGisDialect,NHibernate.Spatial.PostGis" />