这是最流畅的nhibernate抓取策略吗?

时间:2013-07-25 04:24:46

标签: c# nhibernate join fluent-nhibernate fetch

我有一个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探查器运行测试,但我试图获得一个经验法则或最佳实践,当你应该使用Fetch.Select()(在网络上找不到很多)。

我假设我想要在Field2表中访问所有条目的另一个字段我最好先进行前期连接,如果我可能没有从这些关联表中访问数据来执行第二次

在这个我错过的决定中还有其他因素可以发挥作用吗?

1 个答案:

答案 0 :(得分:5)

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

  • 对每个用例不同的所有引用使用默认的Fetchmode
  • 对特殊情况使用Join(),例如多态引用或始终需要引用
  • 对查询使用Fetch(x => x.Fieldx).Eager以显式特定用例的负载