Hello,
I have a class hierarchy that conceptually looks similar to this: <https://lh4.googleusercontent.com/-w3hKntlRKnY/UUlxrFoGCwI/AAAAAAAAAGA/J3kwGDGDT-k/s1600/original.jpg> That is, there's an abstract base class (Relation) and a couple of derived classes. In practice, Customer and Supplier share a lot of code, so I refactored the commonoalities into an abstract class BusinessContact. Now the actual class hierarchy looks like this: <https://lh4.googleusercontent.com/-gK8StoiTOLw/UUlxwXsdouI/AAAAAAAAAGI/puqW6tyODqY/s1600/augmented.jpg> Or in code: public abstract class Relation { public virtual int Id { get; set; } } public class ContactPerson : Relation { public virtual string PhoneNumber { get; set; } } public abstract class BusinessContact : Relation { public virtual string Name { get; set; } } public class Customer : BusinessContact { public virtual string CustomerNumber { get; set; } } public class Supplier : BusinessContact { public virtual string SupplierNumber { get; set; } } I'd like to map this hierarchy to four tables (Relation, ContactPerson, Customer and Supplier) using joined-subclasses in NHibernate, using mapping-by-code (ModelMapper). My mapping looks like this: var mapper = new ModelMapper(); mapper.Class<Relation>(map => { map.Id(x => x.Id, id => id.Generator(Generators.Native)); }); mapper.JoinedSubclass<ContactPerson>(map => { map.Key(key => key.Column("Id")); map.Property(x => x.PhoneNumber); }); mapper.JoinedSubclass<Customer>(map => { map.Key(key => key.Column("Id")); map.Property(x => x.Name); map.Property(x => x.CustomerNumber); }); mapper.JoinedSubclass<Supplier>(map => { map.Key(key => key.Column("Id")); map.Property(x => x.Name); map.Property(x => x.SupplierNumber); }); However, as soon as I try to add the mapping to the Configuration I get an exception: NHibernate.MappingException: Cannot extend unmapped class: BusinessContact I basically understand why this happens. The generated mapping looks like this: <?xml version="1.0" encoding="utf-8"?> <hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="JoinedSubClassMapping" assembly="JoinedSubClassMapping" xmlns="urn:nhib ernate-mapping-2.2"> <class name="Relation" abstract="true"> <id name="Id" type="Int32"> <generator class="native" /> </id> </class> <joined-subclass name="ContactPerson" extends="Relation"> <key column="Id" /> <property name="PhoneNumber" /> </joined-subclass> <joined-subclass name="Customer" extends="BusinessContact"> <key column="Id" /> <property name="CustomerNumber" /> </joined-subclass> <joined-subclass name="Supplier" extends="BusinessContact"> <key column="Id" /> <property name="SupplierNumber" /> </joined-subclass> </hibernate-mapping> Customer and Supplier define BusinessContact in their extends attribute, as if BusinessContact was a "normal" entity in the model. As there's no mapping for BusinessContact, this fails, or course. Note that the "Name" property (defined in BusinessContact does not appear in the mapping either. What I *want *the mapping to look like is this: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="JoinedSubClassMapping" assembly="JoinedSubClassMapping" xmlns="urn:nhibernate-mapping-2.2"> <class name="Relation" abstract="true"> <id name="Id" type="Int32"> <generator class="native" /> </id> </class> <joined-subclass name="ContactPerson" extends="Relation"> <key column="Id" /> <property name="PhoneNumber" /> </joined-subclass> <joined-subclass name="Customer" extends="Relation"> <key column="Id" /> <property name="CustomerNumber" /> <property name="Name" /> </joined-subclass> <joined-subclass name="Supplier" extends="Relation"> <key column="Id" /> <property name="SupplierNumber" /> <property name="Name" /> </joined-subclass> </hibernate-mapping> That is, make Supplier and Customer extend Relation and include all the mapped properties of the (otherwise unmapped) BusinessContact class. How can I achieve this? Thanks a lot for your time, Andre -- You received this message because you are subscribed to the Google Groups "nhusers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nhusers?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
