“禁用了full_qualified_type_name的懒惰属性,因为它在实体级别不支持懒惰”。
NH Profiler报告了此警告,结果,我遇到了可怕的SELECT N + 1副作用。因此,如果返回了2200个子组实体,则将执行附加查询以检索每个InvoicePreference
实体(总共2201个查询)。关于这种关系的某些东西似乎正在引起问题。
这是有问题的实体及其各自的映射。
实体1
public class Subgroup : Entity
{
public virtual string GroupNumber { get; set; }
public virtual string RUSNumber { get; set; }
public virtual string REANumber { get; set; }
public virtual string CustomerType { get; set; }
public virtual string Name { get; set; }
public virtual IList<IndividualEmployment> Employees { get; set; }
public virtual IList<BenefitsAdministrator> Administrators { get; set; }
public virtual InvoicePreference InvoicePreference { get; set; }
}
实体2
public class InvoicePreference : IEntity
{
public virtual Guid Id { get; set; }
public virtual Guid SubgroupId { get; set; }
public virtual bool PaperlessNotifications { get; set; }
}
映射1
public static AutoPersistenceModel ConfigureSubGroup(this AutoPersistenceModel
autoPersistenceModel)
{
return autoPersistenceModel.Override<Subgroup>(map =>
{
map.Table("SubgroupV");
map.Id(s => s.Id).Column(SubGroupPrimaryKeyColumn);
map.Map(s => s.CustomerType, "BAS_Customer_Type");
map.Map(s => s.RUSNumber, "BAS_RUS_Number");
map.Map(s => s.GroupNumber, "BAS_Group_Number");
map.Map(s => s.REANumber, "BAS_REA_Number");
map.HasMany(s => s.Administrators).KeyColumn(SubGroupPrimaryKeyColumn);
map.HasMany(s => s.Employees).KeyColumn(SubGroupPrimaryKeyColumn);
map.HasOne(s => s.InvoicePreference).PropertyRef(i => i.SubgroupId);
});
}
对应2
public static AutoPersistenceModel ConfigureInvoicePreference(this AutoPersistenceModel autoPersistenceModel)
{
return autoPersistenceModel.Override<InvoicePreference>(map =>
{
map.Table("SubgroupInvoicePreference");
map.Schema(RetirementStatementsSchemaName);
});
}
最佳答案
InvoicePreference引用为hasone。由于默认情况下是延迟加载的,因此NHibernate将创建一个代理来填充属性InvoicePreference,并为此需要来自InvoicePreference的标识,该标识在子组中不存在。因此,它必须使用propertyref中的属性进行查询。
为了弥补该问题,.Not.LazyLoad()
和/或.Fetch.Join()
关于c# - 有谁知道为什么我会从NHibernate/NH Profiler得到这个警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11460062/