如果使用主键作为字符串,LazyLoading 不起作用

问题描述 投票:0回答:1

我有这三款

public class Resposta
    {
        [Key]
        public int Id { get; set; }
        public string PerguntaAlias { get; set; }
        public virtual Pergunta Pergunta { get; set; }
        public int JustificativaId  { get; set; }
        public virtual Justificativa Justificativa { get; set; }
        public string Descricao { get; set; }
    }

public class Justificativa
    {
        [Key]
        public int Id { get; set; }
        public string NumeroOC { get; set; }
        public string Objeto { get; set; }
    }
public class Pergunta
    {     
        [Key]
        public string Alias { get; set; }        
        public string Descricao { get; set; }
        public Categoria Categoria { get; set; }
        public Subcategoria? Subcategoria { get; set; }
        
        [Display(Name = "Obrigatório")]
        public bool Obrigatorio { get; set; }
    }

但是当我尝试将延迟加载与“Resposta”一起使用时,它仅适用于模型“Justificativa”,模型“Pergunta”为空。

我不知道是否会发生这种情况,因为“Pergunta”的主键是一个字符串。

这是问题的图片:

我不想使用“包含”,为什么会发生这种情况? (DB上的FK都可以)

c# .net entity-framework lazy-loading .net-6.0
1个回答
0
投票

无法重现。根据调试器中显示的类型,您实际上并未启用延迟加载,否则我会期望

Justificativa
的类型类似于
JustificativaProxy
。您看到的效果只是由于更改跟踪而修复关系的结果 - 似乎您之前已经加载了
Justificativa
的实例(用于 Id 过滤的实例)。

请务必安装

Microsoft.EntityFrameworkCore.Proxies
并在设置时调用
UseLazyLoadingProxies
DbContextOptions
:

services.AddDbContext<AppDbContext>(b => b.Use...(...)
    .UseLazyLoadingProxies());

了解更多:

© www.soinside.com 2019 - 2024. All rights reserved.