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 を作成するにはどうすればよいかということです。

「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))
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 に答える