我只是试图了解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; }
干杯
答案 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)如果关闭对象的映射上的延迟加载,它将始终有效地加载。因此,我建议您逐个查询,以避免加载大量数据链或加载实际上不需要的数据。