2009-04-06 7 views
3

J'ai le code XML suivant (.hbm):problème Fluent 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> 

à l'aide d'une manière Nhibernate type spatial ... Comment puis-je la carte que la propriété en utilisant ClassMap (Courant Nhibernate)?

Merci

Répondre

3

Eh bien, je ne l'ai pas utilisé NHibernate Spatial, mais je parcouru le code et il semble que GeometryType hérite de IUserType de sorte que vous devriez pouvoir l'utiliser avec .CustomTypeIs<>

Par exemple:

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

A moins qu'il ne se produit automagiquement, qui ne sera probablement pas vous obtenir vos param éléments bien. Je ne suis pas sûr d'une façon vraiment agréable de le faire, mais vous pouvez toujours ajouter une modification de XML comme ceci:

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") 
    ); 

Notez que pour obtenir la fonctionnalité WithText, vous devrez ajouter une extension pour XmlElement comme si (WithAtt et AddElement sont des extensions dans l'espace de noms FluentNHibernate.Mapping):

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

Lorsque vous essayez d'utiliser votre code avec Fluent NHibernate 1.0 Je suis incapable de trouver la fonction AddAlteration dans le type PropertyPart. Votre code fonctionne-t-il avec la version 1.0 de Fluent NHibernate? – Martin

+0

Non, cela ne fonctionne plus. En fait, WithAtt a été retiré peu de temps après avoir fait ce post, si ma mémoire est bonne. Vous pouvez toujours définir le type personnalisé avec Map (x => ...). CustomType (), mais je ne pense pas que vous serez en mesure d'obtenir l'attribut/les éléments param. Je suggère de poster dans le groupe FNH à: http://groups.google.com/group/fluent-nhibernate –

Questions connexes