NHibernate:如何在获取多对多时指定条件?

时间:2011-12-15 21:15:45

标签: nhibernate

这个想法是获取所有组并获取成员。我只有提取活跃用户时遇到问题。你能救我吗?

映射:

public class GroupDtoMap : DtoClassMap<GroupDto>
{
    public GroupDtoMap()
    {
        Id(g => g.Id, "group_id");
        HasManyToMany(g => g.Members) //  Members is a List<UserDto>
            .Table("members")
            .ParentKeyColumn("group_id")
            .ChildKeyColumn("user_id");
    }
}

查询:

var groups = Session
            .CreateCriteria<GroupDto>()
                .Add(Expression.Eq("IsActive", true)) // Get only active groups
                .SetFetchMode("Members", NHibernate.FetchMode.Eager)
                .SetResultTransformer(new DistinctRootEntityResultTransformer())
                .Future<GroupDto>();

我尝试了但仍然失败了:

HasManyToMany(g => g.Members)
            .Table("members")
            .ParentKeyColumn("group_id")
            .ChildKeyColumn("user_id")
            .ChildWhere("status = 1");// the column in DB is 'status' with values 0/1

修改 好。看起来ChildWhere()实际上正在工作。这是一个讨厌的缓存。现在的问题是如何强制内部联接获取集合。目前正在进行左外连接。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

据我所知,你不能。对不起。但你可以随时尝试使用映射