C# – Fluent NHibernate, joined-subclass mapping

cfluent-nhibernatenetnhibernateorm

I'm trying to map a joined-subclass scenario using Fluent NHibernate.
I have a class Entity defined in the namespace Core, and a class
SubClass : Entity in the namespace SomeModule

Now I obviously don't want class Entity to know about its derived
types, the SomeModules namespace references Core – not the other way
around.

All the examples I've been able to find use something like:

public class EntityMap : ClassMap<Entity> {
    public EntityMap() {
        Id(x => x.Id)

        var subClassMap = JoinedSubClass<SubClass>("SubClassId", sub => sub.Map(x => x.Id));

        subClassMap.Map(x => x.SomeProperty)
        ...
    }
}

This simply won't work in my situation – I need something akin to the
NHibernate xml mapping:

<joined-subclass name="SubClass" extends="Entity, Core" >
<key column="SubClassId" foreign-key="FK_KollegiumEntity"/>
<property name="Name" length="255" not-null="true" />
...
</joined-subclass>

Has anyone achieved this with Fluent NHibernate?

Best Answer

I think the API has changed since this question was asked, but this works for me:

public class SomeSubclassMap : SubclassMap<SomeSubclass> {
    public SomeSubclassMap()
    {
        KeyColumn("SomeKeyColumnID");
        Map(x => x.SomeSubClassProperty);
        ...
    }
}

I believe KeyColumn is only required if it's different than 'Baseclassname_id'

Note: There should also be a ClassMap<SomeBaseClass> for the base class that SomeSubClass extends.

Related Topic