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))