A quoi servent les propriétés de navigation dans Entity Framework?

.net entity-framework

Question

Je vois dans mon diagramme EF beaucoup de ces propriétés de navigation mais je ne sais pas à quoi elles servent vraiment. Comme je vois dans beaucoup de mes tables, j'ai des propriétés aspnet_Users.

A quoi servent-ils? Est-ce qu'ils aident pour les jointures? ou quoi?

Error 2
Error 3007: Problem in Mapping Fragments starting at lines 1201, 1423: 
Non-Primary-Key column(s) [Field2] are being mapped in both fragments 
to different conceptual side properties - data inconsistency is possible 
because the corresponding conceptual side properties can be independently 
modified.

Réponse acceptée

Une propriété de navigation vous permet de naviguer (duh!) D'une entité à une entité "connectée".

Par exemple, si votre utilisateur est connecté à un rôle, vous pouvez utiliser la navigation "Rôle" pour lire et inspecter le rôle associé à l'utilisateur.

MODIFIER:

Si vous souhaitez charger l'utilisateur avec LINQ-to-Entities et consulter également sa propriété de navigation "Rôle", vous devez explicitement inclure l'entité "Rôle" dans votre requête LINQ - EF ne charge pas automatiquement ces propriétés de navigation pour vous. .

  // load user no. 4 from database
   User myUser = from u in Users.Include("Role")
                 where u.ID = 4
                 select u;

   // look at the role the user has
   string roleName = myUser.Role.Name;

OU:

   // load user no. 4 from database
   User myUser = from u in Users
                 where u.ID = 4
                 select u;

   // check to see if RoleReference is loaded, and if not, load it
   if(!myUser.RoleReference.IsLoaded)
   {
      myUser.RoleReference.Load();
      // now, the myUser.Role navigation property should be loaded and available
   }

   // look at the role the user has
   string roleName = myUser.Role.Name;

C'est fondamentalement un équivalent programmatique d'une relation de clé étrangère dans une base de données - une connexion entre deux objets. En gros, il "cache" ou résout une jointure entre deux tables (ou deux entités, en langage EF).

Marc



Related

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