Entity Framework Core - Chargement paresseux
En s'inclinant à mon Visual Studios la demande, j'ai commencé mon dernier projet à l'aide de Entity Framework Core (1.0.1)
Donc l'écriture de mes modèles de base de données, j'ai toujours à l'aide de la "virtuel" spécificateur pour permettre le chargement paresseux pour une Liste. Si lors du chargement de la table parent, il apparaît que la liste des enfants ne se charge jamais.
Modèle Parent
public class Events
{
[Key]
public int EventID { get; set; }
public string EventName { get; set; }
public virtual List<EventInclusions> EventInclusions { get; set; }
}
Modèle De L'Enfant
public class EventInclusions
{
[Key]
public int EventIncSubID { get; set; }
public string InclusionName { get; set; }
public string InclusionDesc { get; set; }
public Boolean InclusionActive { get; set; }
}
L'ajout de nouveaux enregistrements à ces tables, semble fonctionner comme je suis habitué à l'endroit où je peux imbriquer les EventInclusions enregistrements d'une Liste à l'intérieur de l'enregistrement des Événements.
Mais quand j'ai une requête à cette table
_context.Events.Where(e => e.EventName == "Test")
La Question
EventInclusions retourne une valeur de type null indépendamment des données en arrière-plan.
Après avoir lu un peu, je reçois le sentiment que c'est un changement entre EF6 qui j'ai l'habitude de l'utiliser et de l'EF de Base
Je pourrais utiliser un peu d'aide en soit de fabriquer une couverture de Chargement différé sur la déclaration ou trouver le nouveau format pour spécifier le Chargement Paresseux.
Caz
source d'informationauteur Caz1224
Vous devez vous connecter pour publier un commentaire.
Il semble donc que EF de Base ne prend pas en charge le chargement paresseux. Ses de venir, mais peut-être un certain temps.
Pour l'instant, si quelqu'un d'autre vient sur ce problème et est en difficulté. Ci-dessous est une démonstration de l'utilisation de Désireux de chargement qui est ce que pour l'instant, vous devez utiliser.
Dire avant d'avoir une personne de l'objet et que cet objet contient une Liste de Chapeaux dans une autre table.
Plutôt que d'écrire
Vous avez besoin d'écrire
Et puis
person.Hats.Where(h=> h.id == hat).ToList();
travailleraSi vous avez plusieurs Listes - Chaîne Comprend
J'ai un peu pourquoi cette méthode est plus sûre que la votre ne charge pas les ensembles de données gigantesques qui pourrait ralentir les choses. Mais j'espère qu'ils obtiennent le chargement Paresseux bientôt de retour!!!
Caz
Lazy loading est maintenant disponible sur
EF Core 2.1
et voici le lien vers les docs pertinents:https://docs.microsoft.com/en-us/ef/core/querying/related-data#lazy-loading
LazyLoading n'est pas encore pris en charge par EF de Base, mais il y a un non-officielle de la bibliothèque qui permet LazyLoading: https://github.com/darxis/EntityFramework.LazyLoading. Vous pouvez l'utiliser jusqu'à ce qu'il est officiellement pris en charge.
Il prend en charge EF Core v1.1.1. Il est disponible sous forme de package nuget: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.LazyLoading/
Disclaimer: je suis le propriétaire de ce repo et vous invite à l'essayer, signaler des problèmes et/ou contribuer.
Il y a un une pré-version qui vient de sortir, peu importe, c'est censé être disponible dans la version complète dès.
Un couple de mises en garde:
Cette ligne est niché dans OnConfiguring sur vos données contexte:
Lazy load est prévu pour être en EF core 2.1 - vous pouvez en lire plus sur pourquoi c'est un must-have de la fonctionnalité - ici.