2 Stimmen

Wie man eine Sammlung abstrakter Klassen in nhibernate abbildet

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!

1voto

Sjors Miltenburg Punkte 2366

Okay, ich habe die Lösung gefunden. Nach dem Entfernen der "Inverse=true"-Tag von meinem IList Mapping es funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X