0

J'essaie de configurer des mappages plusieurs-à-plusieurs en utilisant NHibernate 4 et Fluent Nhibernate 2. Il s'agit d'une simple relation d'utilisateur et de rôle. Un utilisateur peut avoir plusieurs rôles et un rôle peut avoir plusieurs utilisateurs. Voici la structure.NHibernate Table de l'association de mise à jour de mappage plusieurs à plusieurs

utilisateur

public User() 
{ 
    Id = Guid.NewGuid(); 
    Roles = new List<Role>(); 
} 

public virtual Guid Id { get; set; }   
public virtual string Name { get; set; } 
public virtual IList<Role> Roles { get; set; } 

Rôle

public Role() 
{ 
    Id = Guid.NewGuid(); 
    Users = new List<User>(); 
} 

public virtual Guid Id { get; set; } 
public virtual string Name { get; set; } 
public virtual IList<User> Users { get; set; } 

usermap

Id(x => x.Id).Column("Id").GeneratedBy.Assigned(); 
Map(x => x.Name); 
HasManyToMany(x => x.Roles) 
    .Cascade.AllDeleteOrphan() 
    .Inverse() 
    .Table("UserRole") 
    .ParentKeyColumn("ObjUser") 
    .ChildKeyColumn("ObjRole"); 

RoleMap

Id(x => x.Id).Column("Id").GeneratedBy.Assigned(); 
Map(x => x.Name); 
HasManyToMany(x => x.Users) 
    .Cascade.None() 
    .Table("UserRole") 
    .ParentKeyColumn("ObjRole") 
    .ChildKeyColumn("ObjUser"); 

Mise à jour d'utilisateur existant

User objUser = UserManager.Get(_userId); 
objUser.Name = txtName.Text; 
foreach (ListItem itemRole in chksRoles.Items) 
{ 
    if (itemRole.Selected) 
    { 
      objUser.Roles.Add(RoleManager.Get(new Guid(itemRole.Value))); 
    } 
} 

J'ai une table UserRole pour les associations et il ne se compose que la colonne ObjRole et objUser. Le problème que j'ai ci-dessous.

1) Je suis capable d'insérer un nouvel enregistrement lorsque je crée un nouvel utilisateur et lui affecte plusieurs rôles. Mais quand j'essaye de mettre à jour un utilisateur existant en changeant ses rôles, il ne met pas à jour les associations en fait, rien n'est arrivé. Les rôles étant à l'utilisateur sont toujours les mêmes.

2) Comment définir la cascade si je ne souhaite pas créer un nouvel utilisateur lorsque je crée un nouveau rôle? La raison étant quand je crée un nouveau rôle, il n'y aura aucun utilisateur qui sera dans ce rôle. J'essaie de comprendre cela en utilisant les mappages hasmanytomany car je ne stocke pas d'autres champs dans la table UserRole donc je ne pense pas qu'il est nécessaire de le gérer en utilisant 2 mappings un-à-plusieurs dans les deux User et Table des rôles.

Appréciez si quelqu'un est en mesure d'aider à ce sujet :) Avons travaillé sur cela depuis hier soir. Merci beaucoup.

Répondre

0

C'est un problème lié au réglage inverse. Et la solution est vraiment facile - suivre la bonne pratique.

Dans ce cas, définissez les deux côtés de la relation - toujours:

var role = RoleManager.Get(new Guid(itemRole.Value)); 
objUser.Roles.Add(role); 
role.Users.Add(objUser); 
+0

J'ai essayé dans mon code, mais il ne fonctionne pas. Merci. –