我正在使用带有 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。
我正在尝试使用“在哪里”,但直到现在成功:
User user= null;
List<Role> roles = null;
var userList = NHibernateHttpModule.Session.QueryOver<User>(() => user)
.JoinAlias(() => user.Roles, () => roles)
.Where(Restrictions.In("User_id", Roles))