Fluent Nhibernate引用和PropertyRef使用惰性加载进行选择

Fluent Nhibernate引用和PropertyRef使用惰性加载进行选择,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我正在使用PropertyRef作为我的引用之一属性。使用LazyLoad()它仍然会选择并加载用户实体,即使我从未“点击”SalesPerson属性 订单映射 Id(x => x.Id).GeneratedBy.Native(); References(x => x.SalesPerson) .LazyLoad() .PropertyRef(x => x.Username)

我正在使用
PropertyRef
作为我的
引用之一
属性。使用
LazyLoad()
它仍然会选择并加载
用户
实体,即使我从未“点击”SalesPerson属性

订单映射

Id(x => x.Id).GeneratedBy.Native();
References(x => x.SalesPerson)
                        .LazyLoad()
                        .PropertyRef(x => x.Username)
                        .Column("rsm");
Map(x => x.Title);
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Username).Column("login");
<many-to-one class="Project.User" lazy="proxy" name="SalesPerson" property-ref="Username">
      <column name="rsm" />
</many-to-one>
订单类别

public class Order : BaseEntity
{
    ...
    public virtual User SalesPerson { get; set; }
    public virtual string Title { get; set; }
    ...
}
public class User : BaseEntity
{
     public virtual string Username { get; set; }
     ...
}
用户映射

Id(x => x.Id).GeneratedBy.Native();
References(x => x.SalesPerson)
                        .LazyLoad()
                        .PropertyRef(x => x.Username)
                        .Column("rsm");
Map(x => x.Title);
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Username).Column("login");
<many-to-one class="Project.User" lazy="proxy" name="SalesPerson" property-ref="Username">
      <column name="rsm" />
</many-to-one>
用户类

public class Order : BaseEntity
{
    ...
    public virtual User SalesPerson { get; set; }
    public virtual string Title { get; set; }
    ...
}
public class User : BaseEntity
{
     public virtual string Username { get; set; }
     ...
}
生成的订单映射

Id(x => x.Id).GeneratedBy.Native();
References(x => x.SalesPerson)
                        .LazyLoad()
                        .PropertyRef(x => x.Username)
                        .Column("rsm");
Map(x => x.Title);
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Username).Column("login");
<many-to-one class="Project.User" lazy="proxy" name="SalesPerson" property-ref="Username">
      <column name="rsm" />
</many-to-one>

执行代码

var order = session.Get<Order>(1);
Console.WriteLine(order.Title);
var order=session.Get(1);
Console.WriteLine(订单.标题);

当我不使用
用户
实体时,是否存在阻止选择加载用户实体的方法?

与属性ref有关,请参见

而不是您所问的,但也可以考虑,如果您使用子类,则带有代理的多对一不允许您进行类型检查,请参阅


我不认为这是NHibernate中的一个bug。这取决于您的映射

首先,请记住,引用映射将在两个映射表之间连接键(主键和外键)。要防止选择+1,只需忽略关键关节

References(x => x.SalesPerson)
                    .LazyLoad()
                    .PropertyRef(x => x.Username)
                    WithForeignKeyName("none") //disable key join.

我想我要改变我的模式,使用实际的ID,这整件事不值得这么麻烦,而且是不好的做法。谢谢你的链接。