2011-07-21 11 views
0

私は面白い問題が起きています。私は間違っていますか、MVC 3でFluent nHibernateを使用しています。ユーザー、ロール、および多くの人のためのUsersinRoleテーブルがあります。多くの関係。Fluent nHibernateの問題が多対多のマッピング

ユーザーマッピング:

Id(user => user.UserID).GeneratedBy.Guid(); 
     Map(user => user.UserName).Not.Nullable(); 
     Map(user => user.Password).Not.Nullable(); 
     Map(user => user.FullName).Not.Nullable(); 
     Map(user => user.Email).Not.Nullable(); 
     Map(user => user.IsActive).Not.Nullable(); 
     Map(user => user.CreationDate).Not.Nullable(); 

     HasManyToMany<Role>(x => x.Roles).Table("tblUserInRoles") 
              .ParentKeyColumn("UserID") 
              .ChildKeyColumn("RoleID") 
              .Cascade.All() 
              .Not.LazyLoad(); 

役割マッピング:

Id(role => role.RoleID).GeneratedBy.Identity(); 
     Map(role => role.RoleName).Not.Nullable(); 
     Map(role => role.IsActive).Not.Nullable(); 
     Map(role => role.Description).Not.Nullable(); 

     HasManyToMany<User>(x => x.Users) 
      .Table("tblUserInRoles") 
      .ParentKeyColumn("RoleID") 
      .ChildKeyColumn("UserID") 
      .Cascade.SaveUpdate() 
      .Inverse() 
      .Not.LazyLoad(); 

ユーザエンティティ:

public virtual Guid UserID { get; set; } 
    public virtual string UserName { get; set; } 
    public virtual string Password { get; set; } 
    public virtual string FullName { get; set; } 
    public virtual string Email { get; set; } 
    public virtual TimeSpan LastLogin { get; set; } 
    public virtual bool IsActive { get; set; } 
    public virtual DateTime CreationDate { get; set; } 
    public virtual IList<Role> Roles { get; set; } 

    public User() 
    { 
     Roles = new List<Role>(); 

    } 
    public virtual void AddRoles(Role role) 
    { 
     role.Users.Add(this); 
     Roles.Add(role); 
    } 

役割のエンティティ:

public virtual string RoleName { get; set; } 

    public virtual bool IsActive { get; set; } 
    public virtual string Description { get; set; } 
    public virtual IList<User> Users { get; set; } 
    public virtual IList<Role> Roles { get; set; } 

    public Role() 
    { 
     Users = new List<User>(); 
    } 

問題は、任意のロールを削除すると、UserInRoleテーブル内のユーザーとロールの関連付けが削除され、削除するロールに関連するすべてのユーザーが削除されることです。同じ事が私がユーザーを削除した場合、逆になります。

問題の原因を知っている人はいますか?

答えて

1

.Cascade.All()をユーザからロールに指定しました。したがって、ユーザを削除するとNHibernateはすべてのロールを削除します。それが起こらない場合は.Cascade.All()を使用しないでください。

ロールからユーザーに.Cascade.SaveUpdate()を指定しました。ロールを削除すると、ユーザーは削除しないでください。ユーザーとの関連付けだけでなく、ユーザーを削除することは確実ですか?

+0

私はいくつかの間違いを犯しました。その作業は今すぐうまくいきます。この[link](http://stackoverflow.com/questions/1321416/fluent-nhibernate-hasmanytomany-mapping-problem)助けてください。 – Saad

関連する問題