I am new to NHibernate.  I have read NHibernate in Action and I have
spent several days searching through forums and blog posts, but I
can't figure out how to map the model below.  If someone could help me
figure this out I would greatly appreciate it. (I used fluent mappings
below but if you rather post a solution using xml that is fine with
me)


  public class ReferencesConcrete1And2
  {
    public int ID { get; set; }
    public IConcrete1And2 Concrete1And2 { get; set; }
  }

  public class ReferencesConcrete2And3
  {
    public int ID { get; set; }
    public IConcrete2And3 Concrete2And3 { get; set; }
  }

  public interface IConcrete1And2
  {

  }

  public interface IConcrete2And3
  {

  }


  public abstract class BaseClass
  {
    public int ID { get; set; }
  }

  public class Concrete1: BaseClass, IConcrete1And2
  {

  }

  public class Concrete2 : BaseClass, IConcrete1And2, IConcrete2And3
  {

  }

  public class Concrete3 : BaseClass, IConcrete2And3
  {

  }

This is my best guess at the mapping but it doesn't work.  (There are
no records in the database with the discriminators "1and2" or
"2and3".  I just made something up to map the interfaces)

  public class BaseClassTypeMap : ClassMap<BaseClass>
  {
    public BaseClassTypeMap()
    {
      Table("base_class");
      Id(x => x.ID).Column("base_class_id");

      DiscriminateSubClassesOnColumn<string>("type_code");
    }
  }

  public class IConcrete1And2Map : SubclassMap<IConcrete1And2>
  {
    public IConcrete1And2Map()
    {
      DiscriminatorValue("1and2");
    }
  }

  public class IConcrete2And3Map : SubclassMap<IConcrete2And3>
  {
    public IConcrete2And3Map()
    {
      DiscriminatorValue("2and3");
    }
  }

  public class Concrete1Map : SubclassMap<Concrete1>
  {
    public Concrete1Map()
    {
      DiscriminatorValue("1");
    }
  }

  public class Concrete2Map : SubclassMap<Concrete2>
  {
    public Concrete2Map()
    {
      DiscriminatorValue("2");
    }
  }

  public class ReferencesConcrete1And2Map :
ClassMap<ReferencesConcrete1And2>
  {

    public ReferencesConcrete1And2Map()
    {
      Table("references_concrete_1_and_2");
      Id(x => x.ID).Column("reference_1_and_2_id");

      References<IConcrete1And2>(x => x.Concrete1And2)
        .Column("base_class_id")
        .Cascade.None();
    }
  }

  public class ReferencesConcrete2And3Map :
ClassMap<ReferencesConcrete2And3>
  {

    public ReferencesConcrete2And3Map()
    {
      Table("references_concrete_2_and_3");
      Id(x => x.ID).Column("reference_2_and_3_id");

      References<IConcrete2And3>(x => x.Concrete2And3)
        .Column("base_class_id")
        .Cascade.None();
    }
  }

  public class Concrete3Map : SubclassMap<Concrete3>
  {
    public Concrete3Map()
    {
      DiscriminatorValue("3");
    }
  }

  public class Concrete3 : BaseClass, IConcrete2And3
  {

  }


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to