2010-08-13 5 views
1

Je suis curieux de savoir quelle est la meilleure pratique pour cette situation dans Entity Framework 4.0. Je l'entité Carte suivante:Entité de suivi automatique - Chargement de la propriété de navigation d'une propriété de navigation

Entité A -> Entité B -> Entité C

Où l'entité A contient une liste des entités B dont chacun contient une liste des entités C de. J'utilise des entités de suivi auto et quand je charge l'entité AI je fais quelque chose de similaire à ceci:

EntityA entityA = ctx.EntityA.Include("EntityB").Where(x => x.Id == id).SingleOrDefault(); 

Quand je tentais de le faire:

EntityA entityA = ctx.EntityA.Include("EntityB").Include("EntityC").Where(x => x.Id == id).SingleOrDefault(); 

Il échoue parce qu'il ne peut pas trouver la propriété de navigation ' Entité C '. Est-il possible de charger les propriétés de navigation? Je devrai également être capable de suivre les changements, accepter les changements et MarkAsDeleted pour mes différentes opérations CRUD. En tant que question secondaire, existe-t-il un attribut commun utilisé pour identifier une propriété de navigation dans Entity Framework? J'espérais utiliser la réflexion et la récursivité pour identifier toutes mes propriétés de navigation.

Répondre

1

Essayez-le. Il charge la propriété de navigation du point courant dans le graphe d'objet:

EntityA entityA = ctx.EntityA.Include("EntityB.EntityC").Where(x => x.Id == id).SingleOrDefault(); 

Si vous avez utilisé les entités de suivi auto modèle T4 pour générer vos entités, il doit suivre automatiquement les changements tout au long de votre objet graphique. Une fois le modèle T4 auto-suivi ajouté à votre projet, vous pouvez l'ouvrir et modifier le fichier et ajouter un attribut personnalisé dans la section qui génère les propriétés de navigation.

+0

J'ai utilisé un template STE T4 pour générer mes entités, cependant, je suis toujours obligé de faire ce qui suit: foreach (EntityB entityB dans entity.EntityB) entityB.AcceptChanges(); – Brandon

+0

De même, existe-t-il un moyen d'inclure automatiquement les propriétés de navigation lors du chargement d'une entité? Une sorte d'attribut [Inclure]? – Brandon

+0

Le 'ObjectContext' a une propriété' ObjectContext.ContextOptions.LazyLoadingEnabled' mais après l'avoir essayé moi-même, je ne pense pas qu'il s'applique aux entités sef-tracking. Encore une fois, vous pouvez modifier le modèle T4 pour qu'il prenne en charge le chargement paresseux. –

Questions connexes