I think we can probably get a change in. Might have to be a bit more clever
than just looking at Type.BaseType though :)

On Thu, Aug 20, 2009 at 1:07 PM, Everett Muniz <[email protected]>wrote:

> Thanks for the feedback James.  I figured the issue was was the inheritance
> layers I just wasn't sure whether it was by design or not.  Is the best
> course to stick with the old-style deprecated approach or do you think a
> change is likely?  I'd be willing to try to code the change if that would be
> any help.
>
>
> On Thu, Aug 20, 2009 at 3:38 AM, James Gregory <[email protected]>wrote:
>
>> It's probably got something todo with the layers between, I'm pretty sure
>> the SubclassMap only checks for direct parents when associating classes.
>>
>>
>> On Thu, Aug 20, 2009 at 2:50 AM, Everett Muniz <[email protected]>wrote:
>>
>>> Using a pretty current PRE-RC1 set of binaries the follow works
>>> brilliantly...
>>>    public class ColorSourceMapping : ClassMap<ColorSource>
>>>     {
>>>         public ColorSourceMapping()
>>>         {
>>>             Table("ColorSource");
>>>             Id(typeof(Guid), "ID");
>>>             JoinedSubClass<ConstantColorSource>("ID", s =>
>>>             {
>>>                 s.Map(x => x.Alpha);
>>>                 s.Map(x => x.Blue);
>>>                 s.Map(x => x.Green);
>>>                 s.Map(x => x.Red);
>>>             });
>>>             JoinedSubClass<SubstringColorSource>("ID", s =>
>>>             {
>>>                 s.Map(x => x.Length);
>>>                 s.Map(x => x.Start);
>>>                 s.References(x => x.RecordAccessor)
>>>                     .Column("RecordAccessorID")
>>>                     .Cascade.All();
>>>                 s.References(x => x.ColorMap)
>>>                     .Column("ColorMapID");
>>>             });
>>>         }
>>>     }
>>>
>>> ConstantColorSource is a direct subclass of ColorSource
>>> (ColorSource->ConstantColorSource).  However, there are a few subclasses
>>> between SubstringColorSource and ColorSource (ColorSource
>>> ->..->..->SubstringColorSource).  Here's how I tried to convert this to the
>>> subclass approach...
>>>
>>>     public class SubstringColorSourceMapping :
>>> FluentNHibernate.Mapping.SubclassMap<SubstringColorSource>
>>>     {
>>>         public SubstringColorSourceMapping()
>>>         {
>>>             KeyColumn("ID");
>>>             Map(x => x.Length);
>>>             Map(x => x.Start);
>>>             References(x => x.RecordAccessor)
>>>               .Column("RecordAccessorID")
>>>               .Cascade.All();
>>>             References(x => x.ColorMap)
>>>                 .Column("ColorMapID");
>>>         }
>>>     }
>>>
>>>     public class ConstantColorSourceMapping :
>>> FluentNHibernate.Mapping.SubclassMap<ConstantColorSource>
>>>     {
>>>         public ConstantColorSourceMapping()
>>>         {
>>>             KeyColumn("ID");
>>>             Map(x => x.Alpha);
>>>             Map(x => x.Blue);
>>>             Map(x => x.Green);
>>>             Map(x => x.Red);
>>>         }
>>>     }
>>>
>>>     public class ColorSourceMapping : ClassMap<ColorSource>
>>>     {
>>>         public ColorSourceMapping()
>>>         {
>>>             Table("ColorSource");
>>>             Id(typeof(Guid), "ID");
>>>         }
>>>     }
>>>
>>> The mapping file generated by the 3 classes above looks like this...
>>>
>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>>> default-access="property" auto-import="true" default-cascade="none"
>>> default-lazy="true">
>>>   <class xmlns="urn:nhibernate-mapping-2.2"
>>> name="GBS.VersiLabel.Core.Domain.Model.ColorSource, GBS.VersiLabel.Core,
>>> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="ColorSource">
>>>     <id type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral,
>>> PublicKeyToken=b77a5c561934e089">
>>>       <column name="ID" />
>>>       <generator class="guid.comb" />
>>>     </id>
>>>     <joined-subclass
>>> name="GBS.VersiLabel.Core.Domain.Model.ConstantColorSource,
>>> GBS.VersiLabel.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
>>> table="`ConstantColorSource`">
>>>       <key>
>>>         <column name="ID" />
>>>       </key>
>>>       <property name="Alpha" type="System.Int32, mscorlib,
>>> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
>>>         <column name="Alpha" />
>>>       </property>
>>>       <property name="Blue" type="System.Int32, mscorlib,
>>> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
>>>         <column name="Blue" />
>>>       </property>
>>>       <property name="Green" type="System.Int32, mscorlib,
>>> Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
>>>         <column name="Green" />
>>>       </property>
>>>       <property name="Red" type="System.Int32, mscorlib, Version=2.0.0.0,
>>> Culture=neutral, PublicKeyToken=b77a5c561934e089">
>>>         <column name="Red" />
>>>       </property>
>>>     </joined-subclass>
>>>   </class>
>>> </hibernate-mapping>
>>>
>>>  You'll notice that the mapping has the ConstantColorSource but not
>>> SubstringColorSource.
>>>
>>> I checked the wiki but it didn't seem to address the specific issue of
>>> multi-level inheritance.
>>>
>>> Am I doing something wrong?
>>>
>>>
>>>
>>
>>
>>
>
> >
>

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

Reply via email to