数据库优化 - Entity Framework 外键属性

Database optimization - Entity Framework Foreign Key attribute

我有一个 table 包含几个外键属性,从身份提供者 2.0 转到 Users table。

    [ForeignKey("IsApprovedBy")]
    public ApplicationUser IsApprovedByUser { get; set; }
    public string IsApprovedBy { get; set; }

这本身不是问题,但我知道对其进行规范化应该可以解决这个问题,这样我就不需要这个外键了。

我确实遇到的问题是,当我获取数据并将其 return 发送到我的前端时,Entity framework 调用数据库 3 次只是为了填写这些 ApplicationUsers 而不是在我的打电话。

Db.Contractors.Include(x => x.IsApprovedByUser)

为什么他在 return 使用我的值而不是在执行我的查询时调用数据库来获取此特定数据(所有其他数据都已加载)?

提前致谢。

跟踪捕获:

这是来自 DbContext 而不是来自 Identity 的延迟加载的问题。默认情况下,当您加载 ApplicationUserApplicationRole 时,Identity 不包含子对象。

如果关闭延迟加载,多次请求数据库的问题将会消失,但 ApplicationUser 的子对象将出现空值。如果您关心数据库请求的数量和数据库性能,则最好禁用延迟加载。但是您必须解决单独加载子对象的问题。