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。