以编程方式忽略具有nHibernate的子项

时间:2010-12-22 03:05:15

标签: nhibernate

我只是试图了解nHibernate并进行查询。在设置映射文件(使用Fluent或常规.hbm.xml文件)时,您可以指定关系(包,一对多等)和子类型 - 这个想法(我相信)就是当您获取对象时它还提取和匹配数据。我的问题是,我可以通过编程方式告诉我的查询忽略这种关系吗?

因此,下面有一个带有Bar对象列表的Foo类。在映射文件中,这将是一对多关系,有时我想要检索具有所有条带的Foo但有时我想要在没有条形图的情况下检索Foo对象,这是出于性能原因。我怎么能这样做?

public class Foo { public int Id { get; set; } public List<Bar> { get; set; } }
public class Bar { public int Id { get; set; }

干杯

1 个答案:

答案 0 :(得分:2)

除非您关闭延迟加载或将其指定为在查询中急切加载,否则不应自动加载该关系。

修改:

在下面的评论中回答您的问题。

1)它是作为查询的一部分完成的。在NHibernate 3.0中使用QueryOver的基本示例如下所示:

var result = Session.QueryOver()
                    .Fetch(x => x.Category).Eager
                    .Where(x => x.Price > 10)
                    .List();

我认为ICriteria是“SetFetchMode(”Category“,FetchMode.Eager)”

2)如果关闭对象的映射上的延迟加载,它将始终有效地加载。因此,我建议您逐个查询,以避免加载大量数据链或加载实际上不需要的数据。