Fluent nhibernate 将SQLServer2008中的几何图形映射到.NET(NHibernate 4.0.0.4000)

Fluent nhibernate 将SQLServer2008中的几何图形映射到.NET(NHibernate 4.0.0.4000),fluent-nhibernate,spatial,fluent-nhibernate-mapping,Fluent Nhibernate,Spatial,Fluent Nhibernate Mapping,我尝试用FluentNHibernate映射SqlServer2008几何体。我使用的是NHibernate版本4.0.0.4000。我用FluentNhibernate安装了NHibernate.Spatial、NetTopologySuite、GeoAPI和NHibernate,所有这些都带有NUget 我的Fluent映射如下所示: public class ArealMap: ClassMap<Areal> { public Areal() {

我尝试用FluentNHibernate映射SqlServer2008几何体。我使用的是NHibernate版本4.0.0.4000。我用FluentNhibernate安装了NHibernate.Spatial、NetTopologySuite、GeoAPI和NHibernate,所有这些都带有NUget

我的Fluent映射如下所示:

public class ArealMap: ClassMap<Areal>
{
    public Areal()
    {
        Table("Areal");
        Id(x => x.Id).Column("Id").GeneratedBy.Identity();
        Map(x => x.Geometry).Column("Geometry").CustomType(typeof(MsSql2008GeometryType));
    }
}
public class Areal 
{
   ....
   public virtual Geometry Geometry{ get; set; }
}
我不再在几何体中得到null,而是在数据库中写入多边形 映射为具有不同坐标的点类型的几何体

我认为这个问题可能是由于使用了不同版本的Microsoft.SqlServer.Type。。。SqlServer2008使用版本10.0,而NHibernate.Spatial.MsSql使用版本11.0。。。 或者GeoApi或NetTopologySuite中可能会出现突破性的变化

编辑:

好吧,我找到了问题的根源

我使用的是Sql Server 2008,因此它在中使用了Microsoft.SqlServer.Types.dll

C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\10.0.0.0__89845dcd8080cc91\
但是,与NHibernate 4.0一起使用的NHibernate.Spatial dll需要更高的SQLServer,并在中引用Microsoft.SQLServer.Types.dll版本11

C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\11.0.0.0_89845dcd8080cc91\
有人知道如何解决这个问题吗

我想我必须签出/克隆一个NHibernate.Spatial项目,手动引用Microsoft.SqlServer.Types.dll版本10,然后重新编译该项目


但是我不知道从哪里开始。我需要重新完成哪些项目?由NHibernate.Spatial或仅由NHibernate.Spatial引用的NetTopologySuite?

虽然可能并不理想,因为它迫使您使用较旧的版本,但我能够通过对web.config中的程序集声明使用绑定重定向来解决NHibernate升级后涉及几何DLL的不匹配问题

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="10.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>


您是不是碰巧在nhusers讨论组中看到了这一点?我们像这样调整了我们的代码,它工作了!这确实不理想,但我认为除了调整MSSQLServer的版本外,没有其他方法。。。另一种方法是使用旧版本的Microsoft.SqlServer.Types编译所有依赖的DLL,但这将非常复杂,并且会使更新更加困难。。。
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\11.0.0.0_89845dcd8080cc91\
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="10.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>