如何忽略lazy =“false”映射?

时间:2013-04-20 18:03:37

标签: nhibernate

我有以下课程:

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

用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”(不要问为什么,我无法更改它)。我调整了一些公司的标准并且必须引用那些类(我不喜欢它但这是一个规则),但我不想获取它们的数据,我希望它很懒。

1 个答案:

答案 0 :(得分:2)

您无法覆盖lazy="false"

你可以做的就是你所做的完全相反:急切地(FetchMode.EagerFetchMode.Join,这是同义词)。