gpt4 book ai didi

c# - 有谁知道为什么我从 NHibernate/NH Profiler 收到这个警告?

转载 作者:行者123 更新时间:2023-11-30 17:11:19 24 4
gpt4 key购买 nike

“禁用了 fully_qualified_type_name 的惰性属性获取,因为它不支持实体级别的惰性”。

此警告由 NH Profiler 报告,因此,我遇到了可怕的 SELECT N + 1 副作用。因此,如果返回 2200 个 Subgroup 实体,将执行额外的查询以检索每个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com