EF Core retorna relações nulas até o access direto

Eu tenho alguns modelos como os abaixo:

public class Mutant { public long Id { get; set; } ... // Relations public long OriginalCodeId { get; set; } public virtual OriginalCode OriginalCode { get; set; } public int DifficultyLevelId { get; set; } public virtual DifficultyLevel DifficultyLevel { get; set; } } 

e

 public class OriginalCode { public long Id { get; set; } ... // Relations public virtual List Mutants { get; set; } public virtual List OriginalCodeInputParameters { get; set; } } 

e no OnModelCreating de DBContext eu fiz as relações como estas:

  modelBuilder.Entity() .HasOne(m => m.OriginalCode) .WithMany(oc => oc.Mutants) .HasForeignKey(m => m.OriginalCodeId) .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(m => m.DifficultyLevel) .WithMany(dl => dl.Mutants) .HasForeignKey(m => m.DifficultyLevelId) .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict); 

agora quando eu peço para Mutantes, o OriginalCode é nulo:

Código Original Nulo

mas assim que eu pedir para o OriginalCode como abaixo:

Códigos Originais

então o campo OriginalCode dos mutantes não será nulo:

Objeto preenchido

Qual é o motivo e como eu poderia consertar isso?

TG.

    O motivo é explicado na seção Carregando Dados Relacionados da documentação do EF Core.

    O primeiro comportamento é porque o EF Core atualmente não suporta carregamento lento, então normalmente você obterá null para as propriedades de navegação até que você as carregue especificamente por meio de um carregamento rápido ou explícito. No entanto, a seção de carregamento Eager contém o seguinte:

    Gorjeta
    O Entity Framework Core corrigirá automaticamente as propriedades de navegação para quaisquer outras entidades que foram carregadas anteriormente na instância do contexto. Portanto, mesmo que você não inclua explicitamente os dados de uma propriedade de navegação, a propriedade ainda poderá ser preenchida se algumas ou todas as entidades relacionadas tiverem sido carregadas anteriormente.

    o que explica porque a propriedade de navegação não é nula no segundo caso.

    Agora, não sei qual dos dois comportamentos deseja consertar, por isso tentarei abordar ambos.

    O primeiro comportamento pode ser “corrigido” usando um dos methods atualmente disponíveis para carregar dados relacionados, por exemplo carregamento antecipado:

     var mutants = db.Mutants.Include(m => m.OriginalCode).ToList(); 

    O segundo comportamento é “por design” e não pode ser controlado. Se você quiser evitá-lo, certifique-se de usar a nova nova instância do DbContext apenas para executar uma única consulta para repetir os dados necessários.

    Atualização: A partir da versão 2.1, o EF Core suporta Lazy Loading . No entanto, ele não é habilitado por padrão, portanto, para utilizá-lo, deve-se marcar todas as propriedades de navegação virtual , instalar Microsoft.EntityFrameworkCore.Proxies e ativá-lo via chamada UseLazyLoadingProxies ou utilizar Lazy-loading sem proxies – ambos explicados com exemplos no núcleo EF documentação.