gpt4 book ai didi

c# - NHibernate - 使用 CreateMultiQuery

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:00 24 4
gpt4 key购买 nike

我的对象模型包含一个 Server 实体,该实体具有 AdapterConfiguration 对象的集合。

我正在尝试找出如何使用 this article 中概述的多查询有效地检索 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 包含 2 元素列表的列表。第一个包含成对的 ServerAdapter 对象,而第二个包含成对的 ServerConnection 对象。

我的问题是,我无法从 result 获取一个包含两个列表的 Server 对象。

最佳答案

所以我得到了这个工作 - 使用 Criteria 而不是 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;

不确定为什么这行得通而 HQL 却行不通,因为从 C# 的角度来看,它们似乎在做完全相同的事情。很明显,由于两种方法生成的 SQL 有很大不同,因此在幕后有些东西是完全不同的。

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

关于c# - NHibernate - 使用 CreateMultiQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30788064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com