我正在使用带有Fluent NHiberante的ASP.NET MVC 3,我使用这些模型得到多对多的关系:
# 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
我的疑问是,如何创建一个NHibernate SQL,只返回此表中的用户而不重复用户。
我正在尝试使用“Where in”,但直到现在才成功:
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 :(得分:2)
var userList = NHibernateHttpModule.Session.Query<User>()
.Where(x => x.Roles.Any())
.ToList()
请注意,我使用的是Linq到NHibernate而不是QueryOver()