0

我正在使用带有 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))
4

1 回答 1

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

请注意,我使用的是 Linq to NHibernate 而不是QueryOver()

于 2012-08-10T14:48:36.133 回答