3

我有一个 Person 表,其中有许多字段是其他表的外键

所以我必须做出选择:

   References(x => x.Field1).Fetch.Join();
   References(x => x.Field2).Nullable().Fetch.Join();
   References(x => x.Field3).Nullable().Fetch.Join();
   References(x => x.Field4).Nullable().Fetch.Join();

或者

   References(x => x.Field1).Fetch.Select();
   References(x => x.Field2).Nullable().Fetch.Select();
   References(x => x.Field3).Nullable().Fetch.Select();
   References(x => x.Field4).Nullable().Fetch.Select();

我看到第一个将对所有其他表进行外部连接,而第二个则不会。我正在使用 nhibernate profiler 运行测试,但我正在尝试获得关于何时应该使用 Fetch.Select() 的经验法则或最佳实践(在网上找不到很多)。

我假设如果我想为所有条目访问 Field2 表中的另一个字段,我最好进行预先连接,并且如果我可能不会访问这些关联表中的数据来执行第二个操作

在这个决定中还有其他我遗漏的因素吗?

4

1 回答 1

5

将该决定推迟到用例,因为它有更多的上下文,并且每个用例都有其他要求。所以:

  • 对每个用例不同的所有引用使用默认的 Fetchmode
  • 用于Join()特殊情况,如多态引用或始终需要的引用
  • 用于Fetch(x => x.Fieldx).Eager查询以显式加载特定用例
于 2013-07-26T14:31:51.347 回答