2009-04-06 8 views
3

私は、次のXML(.hbm)持っている:NHibernateの空間タイプを使用して流暢NHibernateの問題(のClassMap)

<property name="Geometry" column="the_geom"> 
    <type name="NHibernate.Spatial.Type.GeometryType,NHibernate.Spatial"> 
     <param name="subtype">MULTIPOLYGON</param> 
     <param name="srid">-1</param> 
    </type> 
</property> 

It'sを... にはどうすればいいのClassMap(流暢NHibernateの)を使用して、そのプロパティをマッピングすることができますか?

おかげ

答えて

3

まあ、私はNHibernateの空間を使用していませんでしたが、私はコードを閲覧し、あなたが例えば.CustomTypeIs<>

でそれを使用することができるはずですので、それはIUserTypeからGeometryType継承のようになります。

Map(x => x.Geometry, "the_geom").CustomTypeIs<GeometryType>(); 

それは自動的に起こる場合を除き、それはおそらく、しかし、あなたのparam要素を取得することはできません。私はこれを行うには、本当に良い方法のかわからないが、あなたはいつものようにXMLの変更を追加することができます:WithText機能を得るために

Map(x => x.Geometry, "the_geom").AddAlteration(p => p.AddElement("type") 
    .WithAtt("name", "NHibernate.Spatial.Type.GeometryType,NHibernate.Spatial") 
     .AddElement("param") 
      .WithAtt("name", "subtype") 
      .WithText("MULTIPOLYGON") 
     .ParentNode 
     .AddElement("param") 
      .WithAtt("name", "srid") 
      .WithText("-1") 
    ); 

注意が、あなたのようなXmlElementのための拡張機能を追加する必要があります流暢NHibernateは1.0でコードを使用しようとすると、私はPropertyPartタイプ内AddAlteration機能を見つけることができませんよ

public static class XmlExtensions 
{ 
    public static XmlElement WithText(this XmlElement element, string text) 
    { 
     element.InnerText = text; 
     return element; 
    } 
} 
+0

:そう(WithAttとはaddElementはFluentNHibernate.Mapping名前空間の拡張です)。あなたのコードはFluent NHibernateのバージョン1.0で動作していますか? – Martin

+0

いいえ、これはもう機能しません。実際、WithAttは私がこの記事を書いてからずっと後に削除されました。 CustomType ()でも、Map(x => ...)でカスタムタイプを設定できますが、そこにparam属性/要素を取得できるとは思いません。 FNHグループへの投稿をおすすめします:http://groups.google.com/group/fluent-nhibernate –