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
-~----------~----~----~----~------~----~------~--~---