如何在nHibernate中使用FetchMode获取单个级别的关联表

时间:2013-08-27 11:13:46

标签: oracle nhibernate

我有一系列映射到各自数据库对象的类。

在映射中,设置了获取模式,以便使用父记录加载相关的查找。

我现在正在引用其中的一些对象,因此我显然已经急切地加载了附属记录。

如果可能的话,我不想使用延迟加载,因为我从服务层传递这些对象 - 不理想,但我希望我能在查询级别处理这个问题。

举个例子:

var c = s.CreateCriteria(typeof(Transaction))
                        .Add(Restrictions.Eq("Id", myId))
                        .SetFetchMode("Remark", FetchMode.Join)
                        .SetFetchMode("Category", FetchMode.Join)
                        .SetFetchMode("Reason", FetchMode.Join);

var t = c.List<Transaction>().FirstOrDefault();

备注有许多与之关联的记录,当我运行此查询时,这些记录当前正在加载。

您是否可以修改ICriteria以防止参考实体加载其关联?

在这个例子中,我只想要Transction及其直接关联的备注,类别和原因

由于

1 个答案:

答案 0 :(得分:0)

在我的头顶应该是

var c = s.CreateCriteria(typeof(Transaction))
                    .Add(Restrictions.Eq("Id", myId))
                    .CreateAlias("Remark", "remark"))
                    .SetFetchMode("remark.Collection", FetchMode.Lazy);