2010-05-25 8 views
0

Supposons que j'ai une commande d'entité avec OrderDetails comme propriété enfant.Chargement automatique de Lazyload sur Entity Framework 4.0

J'ENABLE lazyloading comme ceci:

_context.ContextOptions.LazyLoadingEnabled = true; 

Je peux nourrir une vue avec une méthode comme ceci:

Order.GetAll()

et de naviguer par les détails de la commande automatiquement sans obtenir l'erreur wirerd "Référence d'objet non définie sur une instance d'un objet"?

+3

Je pense que vous devrez peut-être fournir plus de code. Cette erreur pourrait faire référence à beaucoup de choses différentes autres que vos entités. Et oui, activer le chargement paresseux vous permettra d'accéder à vos entités OrderDetails via une propriété de navigation sans avoir besoin de le charger explicitement à partir de la source de données. – Scott

Répondre

0

Si vous avez un chargement paresseux, lorsque vous chargez les objets, vous devez inclure explicitement les sous-objets.

Alors Order.GetAll() comprendra

return context.Orders.Include("OrderDetails"); 

Une autre alternative consiste à charger les détails de la commande plus tard, comme ceci:

if (!order.OrderDetailsHeaders.IsLoaded) 
{ 
    order.OrderDetailsHeaders.Load(); 
} 
+0

Je pense que ce qui précède s'applique si le chargement paresseux est défini sur false, pas vrai ... correct? – Scott

+0

@ Scott, non, je ne pense pas. Le chargement paresseux signifie que les éléments enfants ne sont pas chargés lorsqu'une entité est chargée. Vous devez charger explicitement les entités enfant en utilisant .Include ou .Load. – Mac

+1

@Mac, vous avez raison que LazyLoadingEnabled = true; ne chargera pas les enfants lorsqu'une entité est chargée ... mais chargera automatiquement n'importe quelle entité la première fois que vous tenterez d'y accéder avec une propriété de navigation sans que vous ayez besoin de le charger vous-même. Vous pouvez également utiliser .Inclure pour charger les enfants immédiatement ou définir LazyLoadingEnabled = false; et appelez .Load avant d'avoir besoin d'accéder à une entité. Voir ce lien: http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontextoptions.lazyloadingenabled.aspx – Scott

Questions connexes