Ich habe Nhibernate in Action gelesen, aber der Abschnitt über die Abbildung polymorpher Sammlungen ist ein wenig zu kurz, wie man das macht.
Ich habe den folgenden Code
[Class]
[Discriminator(Column="MachineType",TypeType=typeof(string))]
public abstract class Machine
{
[Property]
public string Name{get;set;}
}
[Subclass(DiscriminatorValue="Heavy",ExtendsType=typeof(Machine))]
public class HeavyMachine : Machine
{
[Property]
public int Weight { get; set; }
}
[Subclass(DiscriminatorValue="Fast",ExtendsType=typeof(Machine))]
public class FastMachine : Machine
{
[Property]
public float Speed { get; set; }
}
[Class]
public class Module
{
List<Machine> machines = new List<Machine>();
[Bag(Name = "Machines", Cascade = "all", Lazy = false, Inverse=true)]
[Key(1, Column = "Machine")]
[OneToMany(2, ClassType = typeof(Machine))]
public IList<Machine> Machines
{
get
{
return machines.AsReadOnly();
}
private set
{
machines = value.ToList();
}
}
}
Mit dem obigen Code erhalte ich keine Fehler, aber die Sammlung von Maschinen in Modul bleibt leer, nachdem ich meine Objekte aus der Datenbank abgerufen habe. Die Zuordnung der Maschine (und ihrer Unterklassen) scheint in Ordnung zu sein, da eine Eigenschaft vom Typ Maschine korrekt zurückgegeben wird.
Welche Nhibernate.Mapping.Attribute benötige ich, um meine Sammlung abstrakter Klassen abzubilden?
Vielen Dank im Voraus!