gpt4 book ai didi

c# - Fluent nHibernate 中的嵌套查询

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

我有这个问题:

IQueryable<OrderEntity> _records = All().Fetch(x => x.client).FetchMany(x => x.orderItems).ThenFetch(y => y.righeDistinte); 

为了简化这个问题,这些是涉及的实体:

public class OrderEntity : IEntity
{
public virtual ClientEntity client { get; set; }
public virtual ICollection<OrderItemEntity> orderItems { get; set; }
}

public class ClientEntity
{
public virtual String cod_clifor { get; set; }
public virtual String des_ragsoc { get; set; }
}

public class OrderItemEntity
{
public virtual ICollection<DistintaItemEntity> righeDistinte { get; set; }
}

public class DistintaItemEntity
{
public virtual OrderItemEntity orderItem { get; set; }
public virtual DistintaEntity distinta { get; set; }
}

因此,每个 OrderEntity 实例引用一个 ClientEntity 和 0 到多个 OrderItemEntity 对象。反过来,每个 OrderItemEntity 可以引用 0 到许多 DistintaItemEntity。

这篇文章顶部的查询返回所有订单的集合以及相关的客户和订单项,并且每个订单项都获取了不同的信息(所有映射都设置好了)。所有这些都在一个 SQL 查询中。

到目前为止,还不错。

问题出在 DistintaEntity 上,它不是强制加载的,所以如果我想访问它的一些属性,我需要打开 session ,因为延迟加载(只要有一个打开的 session ,它就可以工作,但是当然是额外的查询)。

我想在查询中添加一个指令,以强制直接获取与每个 DistintaItemEntity 关联的 DistintaEntity 对象,但我不知道如何在不丢失单个查询结果的情况下执行此操作。

所有的一对多关系都是left join。

谢谢, 马里奥

最佳答案

跟进:我在之前的回答中提到的查询确实有效,但是,正如上面评论中的手印所提到的,由于 nHibernate 不正确地扫描笛卡尔积,很容易导致多个 child 。

我尝试了链接文章中提到的解决方案之一:更改映射以将 AsSet() 指令添加到 HasMany() 似乎也解决了这个问题。

Full Stack Overflow 问题在这里:NHibernate ThenFetchMany is retrieving duplicate children .

关于c# - Fluent nHibernate 中的嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077517/

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