2013-08-05 3 views
0

Après prendre plusieurs solution sur le mappage de ManyToMany je ne peux pas faire cette chose fonctionne
J'ai ces tables:Courant NHibernate ManyToMany avec table de référence

User: 
intID (PK) 
vcUsername 

Role: 
intID (PK) 
vcDescription 

UserRole: 
intID (PK-FK) 
intRole (PK-FK) 
btActive 

Voici ma classe:

public class User { 
    public virtual int Id {get; set;} 
    public virtual string Username {get;set;} 
    public virtual IList<UserRole> Roles {get; set;} 
} 

public class Role { 
    public virtual int Id {get; set;} 
    public virtual string Description {get;set;} 
    public virtual IList<UserRole> Users {get; set;} 
} 

public class UserRole { 
    public virtual User User {get; set;} 
    public virtual Role Role {get;set;} 
    public virtual bool IsActive {get; set;} 
} 

et ici est ma carte de classe:

public UserMap() { 
    Table("tb_user"); 
    Id(f => f.Id).Column("intID").GeneratedBy.Native(); 
    Map(f => f.Username).Column("vcUsername").Not.Nullable(); 
    HasMany(f => f.Roles).KeyColumn("intID").LazyLoad().Inverse().Cascade.All(); 
} 

public RoleMap() { 
    Table("tb_role"); 
    Id(f => f.Id).Column("intID").GeneratedBy.Native(); 
    Map(f => f.Description).Column("vcDescription").Not.Nullable(); 
    HasMany(f => f.Roles).KeyColumn("intRole").LazyLoad(); 
} 

public UserRoleMap() 
{ 
    Table("tb_user_role"); 
    References(f => f.User).Column("intID").Not.Nullable(); 
    References(f => f.Role).Column("intRole").Not.Nullable(); 
    Map(f => f.IsActive).Column("btActive").Not.Nullable(); 
} 

lorsque je courir, je reçois cette erreur au démarrage
The entity 'UserRole' doesn't have an Id mapped

Comment mapper ce ManyToMany correctement, avec le travail d'insertion et de mise à jour correctement? J'espère que votre guide clairement .. merci

+0

Comme les états d'erreur, si vous mapper une entité, NH a besoin d'un cartographié 'Id' –

+0

mais il y a aucun ID dans ma table de carte, j'essaye déjà d'ajouter l'identification mais a fini avec l'erreur 'l'identification de colonne non trouvée –

Répondre

0

Il devrait probablement être plutôt:

public UserRoleMap() 
{ 
    Table("tb_user_role"); 
    CompositeId() 
      .KeyReference(x => x.User, "intID") 
      .KeyReference(x => x.Role, "intRole"); 
    Map(f => f.IsActive).Column("btActive").Not.Nullable(); 
} 
Questions connexes