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,这整件事不值得这么麻烦,而且是不好的做法。谢谢你的链接。