Fluent nHibernate PropertyRef 急切地获取引用的记录。我可以禁用它吗?

Fluent nHibernate PropertyRef is eagerly fetching referenced records. Can I disable it?

如果我在引用(多对一)上指定 PropertyRef - 它会急切地获取所有相关记录:

References(x => x.Panel).PropertyRef(x => x.Code).Not.Insert().Not.Update();

我可以禁用 N + 1 select 问题吗?

在这里我可以看到这个问题是已知的,但是有什么解决方法吗? Lazy loading not working for many-to-one relationship when mapping to a non-key field using property-ref

有一个解决方法。但只是因为你的多对一是只读的 (我们以后不必关心 insert/udpate 问题)。如何?通过引入虚拟实体,例如PanelView

// Readonly mapping, virtual class
// which ID role is playing column panel_CODE
public PanelViewMapping()
{
    Table("panel-table");
    Id(x => x.Code)
      .Column("panel_CODE")
      .GeneratedBy.Assigned();
    ...

现在,我们必须调整 POCO 实体:

// instead of this
// public virtual Panel Panel { get; set; }
// we will have this
public virtual PanelView Panel { get; set; }

然后我们可以把它作为主键映射:

References(x => x.Panel)
  //.PropertyRef(x => x.Code)
 .Not.Insert()
 .Not.Update();

并且所有功能 (延迟加载) 将正常工作。