首先,我要持久化的类大致如下:
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类型持久化到数据库时遇到以下错误而设置的:
执行用户定义的例程或聚合“geography”时发生.NET Framework错误:System.ArgumentException:24204:空间参考标识符(SRID)无效。指定的SRID必须与在sys.spatial_reference_systems目录视图中显示的受支持的SRID之一匹配。System.ArgumentException:在Microsoft.SqlServer.Types.SqlGeography.set_Srid(Int32 value)处 在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以使用空间地理类型的任何见解,那将不胜感激。