我正在尝试将 Nhibernate 与 Sql 2008 Geography 类型一起使用,但遇到了困难。我正在使用 Fluent Nhibernate 来配置我相当新的配置,所以这也可能是问题所在。
首先,我试图坚持的类看起来像:
public class LocationLog : FluentNHibernate.Data.Entity
{
public virtual new int Id {get;set;}
public virtual DateTime TimeStamp {get;set;}
public virtual GisSharpBlog.NetTopologySuite.Geometries.Point Location {get;set;}
}
映射类如下所示:
public class LocationLogMap : ClassMap<LocationLog>
{
ImportType<GisSharpBlog.NetTopologySuite.Geometries.Point>();
Id(x => x.Id);
Map(x => x.TimeStamp).Generated.Insert();
Map(x => x.Location);
}
为了在 Fluent Nhibernate 中使用 MsSql2008GeographyDialect,我创建了自己的配置类:
public class Sql2008Configuration
: PersistenceConfiguration<Sql2008Configuration, MsSqlConnectionStringBuilder>
{
public Sql2008Configuration()
{
Driver<SqlClientDriver>();
}
public static Sql2008Configuration MsSql2008
{
get { return new Sql2008Configuration().Dialect<MsSql2008GeographyDialect>(); }
}
}
所以我有如下配置代码:
var configuration = Fluently.Configure()
.Database(Sql2008Configuration.MsSql2008.ConnectionString(c => c.Is(connectionString)))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<LocationLog>()
);
所有这些都是为了设置我在尝试将 LocationLog 类型持久保存到数据库时收到以下错误的事实:
在执行用户定义的例程或聚合“地理”期间发生 .NET Framework 错误:System.ArgumentException:24204:空间参考标识符 (SRID) 无效。指定的 SRID 必须与 sys.spatial_reference_systems 目录视图中显示的支持的 SRID 之一匹配。System.ArgumentException: 在 Microsoft.SqlServer.Types.SqlGeography.set_Srid(Int32 值) 在 Microsoft.SqlServer.Types.SqlGeography.Read(BinaryReader r) 在 SqlGeography::.DeserializeValidate(IntPtr, Int32, CClrLobContext*)
我已阅读以下有关如何配置和使用 Nhibernate Spatial 库的文章:
- http://nhibernate.info/doc/spatial/configuration-and-mapping.html
- http://nhibernate.info/doc/spatial/sample-usage.html
但似乎都没有帮助。任何有配置 Nhibernate 以使用空间地理类型的经验的人都可以提供任何见解,我们将不胜感激。