C# 在Asp.net Web.Api项目中使用地理与NHibernate.Spatial

C# 在Asp.net Web.Api项目中使用地理与NHibernate.Spatial,c#,nhibernate,asp.net-web-api2,nhibernate-mapping,geography,C#,Nhibernate,Asp.net Web Api2,Nhibernate Mapping,Geography,我正在Web.Api项目中使用NHibernate,并开始实现地理数据处理的逻辑。我正在关注Nhibernate的一篇文章,但是我的配置出了问题。我不明白为什么。我的配置部分: <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="proxyfactory.factory_class">NHibernate.B

我正在Web.Api项目中使用NHibernate,并开始实现地理数据处理的逻辑。我正在关注Nhibernate的一篇文章,但是我的配置出了问题。我不明白为什么。我的配置部分:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
  <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property>
  <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
  <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
  <property name="connection.connection_string_name">DefaultConnection</property>
  <!--<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>-->
  <property name="dialect">NHibernate.Spatial.Dialect.MsSql2008GeographyDialect,NHibernate.Spatial.MsSql</property>
  <property name="current_session_context_class">web</property>
  <property name="show_sql">true</property>
  <property name="command_timeout">120</property>
  <mapping assembly="GeoMail.Core" />
</session-factory>
它的映射:

<property name="Geo" column="geo" >
  <type name="NHibernate.Spatial.Type.GeometryType, NHibernate.Spatial">
    <param name="srid">4326</param>
    <param name="subtype">POINT</param>
  </type>
</property>
但我总是犯这样的错误: 未找到资源:NHibernate.Spatial.Metadata.SpatialReferenceSystem.MsSql2008GeographyDialect.hbm.xml 但是 查看部件,我们可以发现: -System.Reflection.Assembly.Load(“NHibernate.Spatial.MsSql”).GetManifestResourceNames() [0]“NHibernate.spatical.Metadata.GeometryColumn.MsSql2008GeographyDialect.hbm.xml”
“NHibernate.Spatial.Metadata.GeometryColumn.MsSql2008GeometryDialect.hbm.xml”
[2] “NHibernate.Spatial.Metadata.SpatialReferenceSystem.mssqllegacyDialogue.hbm.xml” [3] “NHibernate.spatical.Metadata.GeometryColumn.mssqllegacyDialogue.hbm.xml”

为什么图书馆要寻找丢失的资源

如果不添加映射MetadataClass.SpatialReferenceSystem属性,Geo始终返回null。 已安装的软件包:

 <package id="GeoAPI" version="1.7.3" targetFramework="net45" />
 <package id="Iesi.Collections" version="4.0.0.4000" targetFramework="net45" /> 
 <package id="Microsoft.SqlServer.Types" version="11.0.1" targetFramework="net45" />     
 <package id="NetTopologySuite" version="1.13.3.2" targetFramework="net45" />
 <package id="NetTopologySuite.IO" version="1.13.3.2" targetFramework="net45" />
 <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
 <package id="NHibernate" version="4.0.0.4000" targetFramework="net45" />
 <package id="NHibernate.Spatial.MsSql" version="4.0.3.4000" targetFramework="net45" />
 <package id="System.Spatial" version="5.6.2" targetFramework="net45" />


虽然我没有使用空间名称空间和方言,但项目进展顺利。但现在我不知道该怎么办……

只是一个想法,但也许你的版本不对?它似乎需要MSSQLS2008NHibernate.Spatial.MsSql当前包含MSSQLS2008Geographydialect。。。。或者您的意思是版本的不同位置?只是添加了SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath(“~/bin”);但这没用。如果不调用Metadata.AddMapping(cfg,MetadataClass.SpatialReferenceSystem);异常不会出现,但Geo属性始终返回nullOk,但您是否向项目中添加了正确的库?你在使用Visual Studio吗?是的。我使用VS2013。图书馆似乎是正确的
 private void InitSessionFactory()
    {
        var cfg = new Configuration().Configure();
        cfg.AddAuxiliaryDatabaseObject( new SpatialAuxiliaryDatabaseObject( cfg ) );
        Metadata.AddMapping( cfg, MetadataClass.GeometryColumn );
        Metadata.AddMapping( cfg, MetadataClass.SpatialReferenceSystem );

        sessionFactory = cfg.BuildSessionFactory();
    } 
 <package id="GeoAPI" version="1.7.3" targetFramework="net45" />
 <package id="Iesi.Collections" version="4.0.0.4000" targetFramework="net45" /> 
 <package id="Microsoft.SqlServer.Types" version="11.0.1" targetFramework="net45" />     
 <package id="NetTopologySuite" version="1.13.3.2" targetFramework="net45" />
 <package id="NetTopologySuite.IO" version="1.13.3.2" targetFramework="net45" />
 <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
 <package id="NHibernate" version="4.0.0.4000" targetFramework="net45" />
 <package id="NHibernate.Spatial.MsSql" version="4.0.3.4000" targetFramework="net45" />
 <package id="System.Spatial" version="5.6.2" targetFramework="net45" />