Sql 2008 GeographyタイプでNhibernateを使用しようとしていますが、問題が発生しています。私はFluentNhibernateを使用して、かなり新しい設定を行っているので、それも問題になる可能性があります。
まず、私が永続化しようとしているクラスは次のようになります。
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"の実行中に.NETFrameworkエラーが発生しました:System.ArgumentException:24204:空間参照識別子(SRID)が無効です。指定されたSRIDは、sys.spatial_reference_systemsカタログビューに表示されるサポートされているSRIDの1つと一致する必要があります。System.ArgumentException:at Microsoft.SqlServer.Types.SqlGeography.set_Srid(Int32 value)at Microsoft.SqlServer.Types.SqlGeography.Read(BinaryReader r)at SqlGeography ::。DeserializeValidate(IntPtr、Int32、CClrLobContext *)
Nhibernate Spatialライブラリを構成および使用する方法について、次の記事を読みました。
- http://nhibernate.info/doc/spatial/configuration-and-mapping.html
- http://nhibernate.info/doc/spatial/sample-usage.html
しかし、どちらも役に立たないようです。洞察を提供できるSpatialGeographyタイプを使用するようにNhibernateを構成した経験のある人なら誰でも大歓迎です。