2012-08-10 44 views
0

我使用ASP.NET MVC 3流利NHiberante,我得到一個關係多到很多使用這些模型:ASP.NET MVC - NHibernate的多對多 - 凡在問題

# User model 

public class User 
{ 
    public virtual int Id { get; set; } 
    public virtual int Name { get; set; } 
    public virtual IList<Role> Roles { get; set; } 
} 

# Role model 

public class Role 
{ 
    public virtual int Id { get; set; } 
    public virtual int Name { get; set; } 
    public virtual IList<User> Users { get; set; } 
} 

# User map 

class UsuarioMap : ClassMap<Usuario> 
{ 
    public UsuarioMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 

     HasManyToMany(x => x.Roles) 
      .AsBag() 
      .Inverse() 
      .Table("role_user"); 
     Table("user"); 
    } 
} 


# Role map 

public class PerfilMap : ClassMap<Role> 
{ 
    public PerfilMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     HasManyToMany(x => x.Users) 
      .AsBag() 
      .Cascade 
       .All() 
      .Table("role_user");    
     Table("role"); 
    } 
} 

而且在其中鏈接的機型值的表會顯示這樣的:

# Table role_user 

Role_id User_id 
1  1 
2  1 
3  2 
4  1 
1  2 

我的疑問是,我怎麼可以創建一個SQL的NHibernate這個表裏面只返回用戶不重複的用戶。

我試圖用 「凡」,但直到現在蒙山現在的成功:

  User user= null; 
     List<Role> roles = null; 

     var userList = NHibernateHttpModule.Session.QueryOver<User>(() => user) 
      .JoinAlias(() => user.Roles,() => roles) 
      .Where(Restrictions.In("User_id", Roles)) 
+0

你想返回所有擁有至少一個角色的用戶? – 2012-08-10 14:12:51

+0

正確的伊恩,有可能嗎? – 2012-08-10 14:17:24

回答

2
var userList = NHibernateHttpModule.Session.Query<User>() 
            .Where(x => x.Roles.Any()) 
            .ToList() 

請注意,我使用LINQ to NHibernate的,而不是QueryOver()

+0

Twoflower,在NHiberante 3中沒有查詢 – 2012-08-10 15:28:47

+1

有,你只需要'使用NHibernate.Linq;' – twoflower 2012-08-10 15:41:00

+0

Twoflower,完美! – 2012-08-10 16:16:45