2010-10-18 7 views
2

J'utilise Fluent (1.1.0) NHibernate (2.1.2) et j'ai une (sous) sous-classe avec une référence plusieurs-à-plusieurs à une autre classe:Fluent Nhibernate, Sous-classe, ManyToMany. Une association de la table fait référence à une classe non mappée

(Sub) Sous classe - < Tableau Cross> - Autres classe

ou

FloorplanObject (classe de base)

Géométrie (sous-classe)

stand (SubSubclass) - - < ExhibitorStand> - exposant

Classe de base:

public class FloorplanObject 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Mapping classe de base:

class FloorplanObjectMap : ClassMap<FloorplanObject> 
{ 
    public FloorplanObjectMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name);    
    } 
} 

Sous Classe:

public class Geometry : FloorplanObject 
{ 
    public virtual List<float> Positions { get; set; } 

    public Geometry() 
    { 
     Positions = new List<float>(); 
    } 
} 

Sous classe Mapping:

public class GeometryMap : SubclassMap<Geometry> 
{ 
    public GeometryMap() 
    { 
     Map(x => x.Positions); 
    } 
} 

(Sub) Sous Classe:

public class Stand : Geometry 
{ 
    public virtual string StandNumber { get; set; } 
    public virtual List<Exhibitor> HasExhibitors { get; set; } 

    public Stand() 
    { 
     HasExhibitors = new List<Exhibitor>(); 
    } 
} 

(Sub) Sous classe Mapping:

public class StandMap : SubclassMap<Stand> 
{ 
    public StandMap() 
    { 
     Map(x => x.StandNumber); 
     HasManyToMany(x => x.HasExhibitors) 
      .Cascade.All() 
      .Inverse() 
      .Table("ExhibitorStand"); 
    } 
} 

Autre Classe:

public class Exhibitor 
{ 
    public virtual int Id { get; private set; } 
    public virtual string Name { get; set; } 

    public virtual List<Stand> OnStands { get; set; } 

    public Exhibitor() 
    { 
     OnStands = new List<Stand>(); 
    } 
} 

Autre Mapping Classe:

public class ExhibitorMap : ClassMap<Exhibitor> 
{ 
    public ExhibitorMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     HasManyToMany(x => x.OnStands) 
      .Cascade.All() 
      .Table("ExhibitorStand"); 
    } 
} 

Sur l'initialisation d'un ISession avec les applications ci-dessus, je reçois l'erreur suivante:

NHibernate.MappingException: An association from the table ExhibitorStand refers to an unmapped class: Stand

Quelqu'un at-il une idée de ce que je fais mal ici?

Répondre

1

Vos correspondances semblent correctes, il semble que votre logique d'initialisation de Session Factory ne prenne pas votre classe StandMap pour une raison quelconque. Vérifiez simplement que votre code Fluently.Configure() peut accéder à tous vos mappages de classe.

10

Oh mon dieu. ce mannequin:

class FloorplanObjectMap : ClassMap<FloorplanObject> 
{ 
    public FloorplanObjectMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name);    
    } 
} 

devrait être:

public class FloorplanObjectMap : ClassMap<FloorplanObject> 
{ 
    public FloorplanObjectMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name);    
    } 
} 

Toutes mes excuses si vous avez perdu votre temps à lire ce post. Première aussi ....:/

+0

Et c'est exactement le même problème que j'ai rencontré! – nvuono

+0

Et moi, pas une perte de temps du tout ... m'a probablement sauvé des heures! –

Questions connexes