Net Core - .Include () entraîne une boucle entraînant le blocage du débogage Visual Studio

asp.net-core-mvc dbcontext eager-loading entity-framework-core visual-studio-2017

Question

Ma base de données a une relation un-à-plusieurs entre "UsageRecord" et "Dimension"

Schéma de base de données

Ceci est modélisé comme suit (en utilisant une approche Database-First):

public partial class Dimension
    {               
        ...          
        public virtual ICollection<UsageRecord> UsageRecord { get; set; }       
    }

Usage Record class:

      public partial class UsageRecord
        {
            public long Id { get; set; }
            ...
            public long DimensionId { get; set; }    
            public virtual Dimension Dimension { get; set; }              
        }

Donc, si j'interroge la liste de UsageRecords (EagerLoading):

_context.Set<UsageRecord>.Where(x => x.ProductId == productId).ToList()

Je reçois une liste d'objets UsageRecord que je peux parcourir lors du débogage: fiche d'utilisation

Veuillez noter que l'objet Dimension est null, ce qui est correct car je ne l'ai pas inclus dans la requête.

Maintenant, si j'essaie de l'inclure, l'application se bloque:

_context.Set<UsageRecord>.Where(x => x.ProductId == productId).Include(p => p.Dimension).ToList();

crash

Postman se ferme avec une erreur 502 et le VS Debug affiche d'abord une liste de points d'interrogation "?" avant de s'écraser.

Je pense que cela est dû au fait qu'en incluant l'objet Dimension, cela parcourt la liste des UsageRecords attachés, puis encore et encore la Dimension.

Comment puis-je l'éviter?

Réponse populaire

Pour récupérer votre résultat à partir d'une requête LINQ, vous pouvez résoudre votre problème de l'une des manières suivantes:

  • Configurez votre sérialiseur pour ignorer les boucles
  • Créer un modèle de vue pour l'action de votre contrôleur
  • Utilisez le type anonyme à partir du résultat choisi dans l'action de votre contrôleur


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow