0

我有以下课程:

public class PurchaseOrder
{
   ...
   Store Store { get; protected set; }
   User CreatedBy { get; protected set; }
   User ApprovedBy { get; protected set; }
   ...
}

User 和 Store 类使用lazy="false" 选项进行映射。

<class name="User" lazy="false">

更具体地说,它们与使用lazy="false"选项映射的其他一些实体相关联。而且我不允许更改它。这不是“我的”课程,它们属于其他领域。

我的问题是,每次我获取 PurchaseOrder 时,它都会为这些类及其依赖项产生额外的查询,导致我遇到 SELECT N+1 问题。在 99% 的情况下,我不需要所有这些信息 - 存储 id 和用户 id 对我来说就足够了。尝试使用...

session.CreateCreteria<PurchaseOrder>()
   ...
   .SetFetchMode("CreatedBy", FetchMode.Lazy)
   .SetFetchMode("ApprovedBy", FetchMode.Lazy)
   .SetFetchMode("Store", FetchMode.Lazy)
   ...

..但这无济于事。

我怎样才能强迫这些关联变得懒惰并忽略lazy="false"

只是要清楚。存储在 User 和 Store 类中的信息对我的域没有用。所以我根本不希望它被获取。此外,如果我在查询中加入用户和商店,它将导致对也映射为lazy="false" 的实体的查询链(不要问为什么,我无法更改它)。我符合某些公司的标准并且必须引用这些类(我不喜欢它,但这是一个规则),但我不想获取他们的数据,我希望它懒惰。

4

1 回答 1

2

你不能覆盖lazy="false".

您可以做的与您所做的完全相反:急切地获取(FetchMode.EagerFetchMode.Join,它们是同义词)。

于 2013-04-20T23:53:59.623 回答