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
-~----------~----~----~----~------~----~------~--~---