Existe-t-il un moyen de désactiver le chargement différé pour une requête spécifique sur Entity Framework 6? Je veux l'utiliser régulièrement, mais parfois je veux le désactiver. J'utilise des propriétés virtuelles pour les charger paresseusement.
c#
entity-framework
lazy-loading
Marco Alves
la source
la source
this.Configuration.LazyLoadingEnabled = false;
, puis la redéfinirthis.Configuration.LazyLoadingEnabled = true;
? En outre, vous pouvez lire ce msdn.microsoft.com/en-us/data/jj574232.aspxRéponses:
définissez le code suivant avant la requête que vous souhaitez exécuter
context.Configuration.LazyLoadingEnabled = false;
la source
Vous pouvez désactiver le chargement différé pour une requête spécifique comme suit:
public static Cursos GetDatosCursoById(int cursoId) { using (var bd = new AcademyEntities()) { try { bd.Configuration.ProxyCreationEnabled = false; return bd.Cursos.FirstOrDefault(c => c.cursoId == cursoId); } catch (Exception ex) { return null; } } }
la source
Il me manque peut-être quelque chose ici, mais plutôt que de changer la configuration à chaque fois, une autre approche pourrait-elle consister à n'utiliser
.Include()
que les requêtes pour lesquelles vous souhaitez charger avec impatience?Supposons que nous ayons une
Product
classe qui a une propriété de navigation vers uneColour
classe, vous pouvez charger leColour
pour unProduct
comme ceci -var product = _context.Products .Where(p => p.Name == "Thingy") .Include(x => x.Colours) .ToList();
la source
Accédez aux propriétés de votre diagramme et recherchez une propriété désignée pour le chargement différé et désactivez-la.
Si vous utilisez d'abord le code, accédez à votre zone de configuration et désactivez-le à partir de là avec:
this.Configuration.LazyLoadingEnabled = false;
la source
Dans EF Core:
context.ChangeTracker.LazyLoadingEnabled = false;
Par cette réponse .
la source
Une autre approbation pour une autre version d'EF (Entity Framework 5)
//Note: ContextOptions instead of ChangeTracker or Configuration context.ContextOptions.LazyLoadingEnabled = false;
la source
context
est unObjectContext
, le prédécesseur plus ou moins dépréciée de son emballage,DbContext
.Supposons que vous ayez ceci:
IOrderedQueryable<Private.Database.DailyItem> items; using (var context = new Private.Database.PrivateDb()) { context.Configuration.LazyLoadingEnabled = false; items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite); }
Vous obtiendrez toujours un chargement paresseux, malgré le paramètre explicite de ne pas faire. Le correctif est simple, changez-le en ceci:
List<Private.Database.DailyItem> items; using (var context = new Private.Database.PrivateDb()) { // context.Configuration.LazyLoadingEnabled = false; items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite).ToList(); }
la source