Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fluent NHibernate, joined-subclass mapping

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?

like image 998
Martin Faartoft Avatar asked Nov 25 '08 16:11

Martin Faartoft


2 Answers

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.

like image 159
Sean Lynch Avatar answered Oct 13 '22 09:10

Sean Lynch


Sorry missed your comment, found this

public class SubClassMap : JoinedSubClassPart< SubClass >
{
    public SubClassMap()
        : base("SubClassId")
    {
         Map(x => x.Name); 
         Map(x => x.SomeProperty); 
    }
}

Hope it helps if you haven't solved it already.

like image 33
Magnus Bertilsson Avatar answered Oct 13 '22 08:10

Magnus Bertilsson