ASP.NET MVC - 多种多样的NHibernate - 问题所在

时间:2012-08-10 13:59:49

标签: asp.net-mvc nhibernate fluent-nhibernate

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

1 个答案:

答案 0 :(得分:2)

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

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