2011-07-21 71 views
0

我有一个有趣的问题发生在我身上,我不知道什么即时通讯做错了,即时通讯与MVC 3使用流利nHibernate,我得到了用户,角色和UsersinRole表为许多很多关系。流利的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

我犯了一些错误,现在工作正常,这个[链接](http://stackoverflow.com/questions/1321416/fluent-nhibernate-hasmanytomany-mapping-problem)帮助我。 – Saad