Luk*_*ust 22 c# nhibernate geography fluent-nhibernate sql-server-2008
我试图使用Nhibernate与Sql 2008地理类型,并有困难.我正在使用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;}
}
Run Code Online (Sandbox Code Playgroud)
映射类如下所示:
public class LocationLogMap : ClassMap<LocationLog>
{
ImportType<GisSharpBlog.NetTopologySuite.Geometries.Point>();
Id(x => x.Id);
Map(x => x.TimeStamp).Generated.Insert();
Map(x => x.Location);
}
Run Code Online (Sandbox Code Playgroud)
为了将MsSql2008GeographyDialect与Fluent Nhibernate一起使用,我创建了自己的配置类:
public class Sql2008Configuration
: PersistenceConfiguration<Sql2008Configuration, MsSqlConnectionStringBuilder>
{
public Sql2008Configuration()
{
Driver<SqlClientDriver>();
}
public static Sql2008Configuration MsSql2008
{
get { return new Sql2008Configuration().Dialect<MsSql2008GeographyDialect>(); }
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有配置代码,如:
var configuration = Fluently.Configure()
.Database(Sql2008Configuration.MsSql2008.ConnectionString(c => c.Is(connectionString)))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<LocationLog>()
);
Run Code Online (Sandbox Code Playgroud)
所有这些都是为了设置我在尝试将LocationLog类型持久化到数据库时遇到以下错误的事实:
在执行用户定义的例程或聚合"geography"期间发生.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库的文章:
但似乎都没有帮助.任何有经验配置Nhibernate使用可以提供任何见解的空间地理类型的人都将非常感激.
Iai*_*ain 10
我在同一条船上,感谢你的开始,我得到了它(插入和读取空间数据).对于其他感兴趣的人,首先是GisSharpBlog.NetTopologySuite.Geometries.Point类在NetTopologySuite.dll中,它是nHibernate.Spatial下载的一部分.
其次,根据James的观点,确保将SRID设置为4326.
最后,地图需要如下所示:
Map(a => a.Location).CustomType(typeof(NHibernate.Spatial.Type.GeometryType));
Run Code Online (Sandbox Code Playgroud)
我正在使用地理,但我在某处读到使用GeometryType可能会起作用,它对我有效(我插入了一些点并在数据库中验证了它).我还读到最好为地理编写SQL查询,以便您可以使用特殊的SQL 2008 Spatial方法(而不是使用Criteria).
| 归档时间: |
|
| 查看次数: |
7495 次 |
| 最近记录: |