Did some stepping and found this:

PropertyMap.Write()

  public void Write(XmlElement classElement, IMappingVisitor visitor)
         {
             visitor.Conventions.AlterMap(this);

             XmlElement element = classElement.AddElement("property")
                 .WithAtt("name", _property.Name)
                 .WithProperties(_extendedProperties);


              
element.AddElement("column").WithProperties(_columnProperties);

             foreach (var action in _alterations)
             {
                 action(element);
             }
         }

The call to visitor.Conventions.AlterMap seems to modify the  
_alterations without regard to the pre-existence of an alteration of  
the same "type".

Prior to calling that line _alterations contained my one alteration  
setting the IUserType; after calling that line it has 3 alterations:

     [0]: {Method = {Void <CustomTypeIs>b__6(System.Xml.XmlElement)}}   
<--- The only one that should be here.
     [1]: {Method = {Void <CustomTypeIs>b__6(System.Xml.XmlElement)}}
     [2]: {Method = {Void <CustomSqlTypeIs>b__c(System.Xml.XmlElement)}}

I'll take a look at modifying the default Enum convention such that it  
will look for existing alterations and, if one exists for either  
CustomeTypeIs or CustomSqlTypeIs then it will ignore the property.
Does that sound like expected/reasonable behavior?


On Feb 17, 2009, at 6:38 PM, Brendan Erwin wrote:

> I didn't see anything in the issue list about this so maybe I'm the  
> first to notice:
>
> Given this mapping:
>
>             WithTable("Insurance");
>
>             ...
>
>             Component(x => x.InsuranceCardData, m =>
>                                                    {
>                                                        ...
>                                                        m.Map(x =>  
> x.PatientRelationshipToInsured,
>                                                               
> "RelationshipFlag")
>                                                              .CustomTypeIs 
> (typeof(PatientRelationshipToInsuredUserType));
>                                                    });
>
>
> I get this HBM:
>
> <?xml version="1.0" encoding="utf-8"?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default- 
> lazy="true" assembly="Clearwave.Models"  
> namespace="Clearwave.Models.Encounters">
>   <class name="Insurance" table="Insurance" xmlns="urn:nhibernate-mapping-2.2 
> ">
>     ...
>     <component name="InsuranceCardData" insert="true" update="true">
>       ...
>       <property name="PatientRelationshipToInsured"  
> type 
> = 
> "FluentNHibernate 
> .Mapping 
> .GenericEnumMapper`1[[Models.PatientRelationshipsToInsured,Models,  
> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]],  
> FluentNHibernate, Version=0.1.0.0, Culture=neutral,  
> PublicKeyToken=8aa435e3cb308880">
>         ...
>     </component>
>     ...
>   </class>
> </hibernate-mapping>
>
>
> Shouldn't the HBM be referencing my custom type instead of the  
> GenericEnumMapper?
>
>
>
>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to