2010-01-19 5 views
2

J'ai lu Nhibernate in Action, mais la section sur la cartographie des collections polymorphes est un peu trop courte sur la façon de faire.Comment mapper une collection de classes abstraites dans nhibernate

J'ai le code suivant

[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(); 
    } 
    } 
} 

Avec le code ci-dessus, je ne reçois pas d'erreurs, mais la collection de machines dans le module reste vide après retreiving mes objets de la base de données. Le mappage de la Machine (et de ses sous-classes) semble correct, car une propriété de type Machine est correctement renvoyée.

De quelles Nhibernate.Mapping.Attributes ai-je besoin pour mapper ma collection de classes abstraites?

Merci d'avance!

Répondre

1

Ok, j'ai trouvé la solution. Après avoir supprimé la balise "Inverse = true" de mon mappage IList, cela a fonctionné.

Questions connexes