Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I managed to get it working by doing the following:</p> <pre><code>public class Case { public virtual int? Id { get; set; } public virtual CaseReferral Referral { get; set; } } public class CaseReferral { public virtual string Type { get; protected set; } public virtual int? ReferralId { get; protected set; } public virtual string Name { get { return null; } //NOTE: We need this for mapping reasons protected virtual int CaseId { get; set; } protected CaseReferral() { } } public class CaseSourceAReferral : CaseReferral { private SourceA _sourceA; public virtual SourceA Source { get { return _sourceA; } protected set { _sourceA = value; Type = "SourceA"; ReferralId = ( _sourceA != null ? _sourceA.Id : null ); } } public override string Name { get { return Source.Name; } } //NOTE: Default constructor for mapping reasons protected CaseSourceAReferral() { } public CaseSourceAReferral( int caseId, SourceA source ) { CaseId = caseId; Source = source; } } public class CaseMap : ClassMap&lt;Case&gt; { public CaseMap() { Id( c =&gt; c.Id ); References( c =&gt; c.Referral ).Column( "Id" ); } } public class CaseReferralMap : ClassMap&lt;CaseReferral&gt; { public CaseReferralMap() { Id( Reveal.Property&lt;CaseReferral&gt;( "CaseId") ).Column( "Id" ); Map( r =&gt; r.Type ).Column( "ReferralType" ); Map( r =&gt; r.ReferralId ).Column( "ReferralId" ); DiscriminateSubClassesOnColumn( "ReferralType" ); } } public class CaseSourceAReferralMap : SubclassMap&lt;CaseSourceAReferral&gt; { public CaseSourceAReferralMap() { DiscriminatorValue( "SourceA" ); References( r =&gt; r.Source ).Column( "ReferralId" ); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload