C# NHibernate-使用CreateMultiQuery

C# NHibernate-使用CreateMultiQuery,c#,nhibernate,C#,Nhibernate,我的对象模型包含一个服务器实体,该实体包含适配器和配置对象的集合 我试图找出如何使用中概述的多查询有效检索服务器的详细信息 到目前为止,根据链接的文章,我有以下几点 var query1 = "from Server s left outer join s.Adapters pa where s.ServerID = :serverID"; var query2 = "from Server s left outer join s.Configurations cc where s.Server

我的对象模型包含一个
服务器
实体,该实体包含
适配器
配置
对象的集合

我试图找出如何使用中概述的多查询有效检索
服务器的详细信息

到目前为止,根据链接的文章,我有以下几点

var query1 = "from Server s left outer join s.Adapters pa where s.ServerID = :serverID";
var query2 = "from Server s left outer join s.Configurations cc where s.ServerID = :serverID";

var result = Session.CreateMultiQuery()
                    .Add(Session.CreateQuery(query1))
                    .Add(Session.CreateQuery(query2))
                    .SetParameter("serverID", s.ServerID)
                    .List();
此时,
result
包含一个由两个元素组成的列表。第一个包含成对的
服务器
适配器
对象,而第二个包含成对的
服务器
连接
对象


我的问题是,我无法从
结果
获取一个
服务器
对象,并且两个列表都已填充

所以我得到了这个工作-使用标准而不是HQL。解决办法如下

var criteria1 = DetachedCriteria.For<Server>()
                    .Add(Restrictions.Eq("ServerID", s.ServerID))
                    .SetFetchMode("Adapters", FetchMode.Eager)
                    .CreateCriteria("Adapters", JoinType.LeftOuterJoin);

var criteria2 = DetachedCriteria.For<Server>()
                    .Add(Restrictions.Eq("ServerID", s.ServerID))
                    .SetFetchMode("Configurations", FetchMode.Eager)
                    .CreateCriteria("Configurations", JoinType.LeftOuterJoin);

var result = Session.CreateMultiCriteria()
                    .Add(criteria1)
                    .Add(criteria2)
                    .List();

IList list = (IList)result[0];
var server = list[0] as Server;      
var criteria1=DetachedCriteria.For()
.Add(Restrictions.Eq(“ServerID”,s.ServerID))
.SetFetchMode(“适配器”,FetchMode.Eager)
.CreateCriteria(“适配器”,JoinType.LeftOuterJoin);
var criteria2=DetachedCriteria.For()
.Add(Restrictions.Eq(“ServerID”,s.ServerID))
.SetFetchMode(“配置”,FetchMode.Eager)
.CreateCriteria(“配置”,JoinType.LeftOuterJoin);
var result=Session.CreateMultiCriteria()
.Add(标准1)
.Add(标准2)
.List();
IList list=(IList)结果[0];
var server=将[0]列为服务器;
不知道为什么这样做有效,而HQL没有,因为从C#的角度来看,他们似乎在做完全相同的事情。显然,这两种方法生成的SQL有很大的不同


我仍然更喜欢使用HQL,因为它看起来更具可读性——但现在就可以了。

干得好!最后很容易;)我现在面临这个问题,但是使用SQL SP。我认为这是NH中的一个bug。