在询问之前,我已查看过有关此主题的所有相关帖子
我有团队,我有会员,他们之间有多对多的关系
基本上:会员 - > MemberTeam< - Team
使用我的查询,我尝试将所有属于同一团队的成员作为查询成员(包括查询成员)
我使用以下FluentHibernate创建了我的表:
TeamMap代码:
Id(x => x.ID).GeneratedBy.GuidComb().UnsavedValue("00000000-0000-0000-0000-000000000000");
HasManyToMany(x => x.Members)
.Table("MemberTeam")
.ChildKeyColumn("TeamID")
.ParentKeyColumn("MemberID");
MemberMap代码:
Id(x => x.ID).GeneratedBy.GuidComb().UnsavedValue("00000000-0000-0000-0000-000000000000");
HasManyToMany(x => x.Teams)
.Table("MemberTeam")
.ChildKeyColumn("MemberID")
.ParentKeyColumn("TeamID");
我查询的代码是:
DetachedCriteria dCriteria = DetachedCriteria.For(typeof(Team), "team")
.SetProjection(Projections.Id())
.Add(Property.ForName("team.ID").EqProperty("mt.ID"));
ICriteria criteria = Session.CreateCriteria(typeof (Member), "member")
.CreateAlias("Teams", "mt")
.Add(Subqueries.Exists(dCriteria))
.Add(Restrictions.Eq("mt.MemberID", new Guid(memberID)));
IList<Member> list = criteria.List<Member>();
我知道我做错了什么,但我无法理解它的含义
任何帮助将不胜感激
非常感谢!
P.S。我的地图接缝很好,我可以保存对象就好了!
答案 0 :(得分:4)
通过为CreateAlias
路径调用Teams
,NHibernate将为您加入适当的表。不需要在成员ID上执行子查询:
var members = session
.CreateCriteria<Member>("member")
.CreateAlias("Teams", "mt")
.List<Member>();
但是,你甚至没有使用别名,所以你可能只是渴望得到团队:
var members = session
.CreateCriteria<Member>("member")
.SetFetchMode("Teams", FetchMode.Eager)
.List<Member>();
这样做可确保您在访问每个Member
的{{1}}集合时不会再次访问数据库。