0

J'essaie de récupérer un objet utilisateur à partir d'une référence clé étrangère, mais chaque fois que j'essaie de le faire rien ne se retourne ...Impossible de récupérer l'objet utilisateur de relations clés étrangères LINQ à la déclaration des entités

Ma table est mis en place comme ceci:

FBUserID long, 
    UserID uniqueidentifier 

donc j'ai mon dépôt essayer d'obtenir l'utilisateur quand il est fourni le FBUserID:

public User getUserByFBuid(long uid) 
    { 
     User fbUser = null; 
     IEnumerable<FBuid> fbUids = _myEntitiesDB.FBuidSet.Where(user => user.FBUserID == uid); 

     fbUser = fbUids.FirstOrDefault().aspnet_Users; 

     return fbUser; 
    } 

J'ai vérifié que le uid (FBUserID) a passé i n est correct, j'ai vérifié que l'ID utilisateur correspond au FBUserID. Et je l'ai également vérifié pour vous assurer que fbUids.Count() > 0 ...

Je suis retourné fbUids.FirstOrDefault().FBUserID et obtenu le FBUserID correct, mais chaque fois que je tente de retourner le aspnet_Users ou aspnet_Users.UserName, etc ... Je ne comprends pas rien retourné. (Je devine qu'il y a une erreur pour une raison quelconque)

Je n'ai pas de mise au point correctement configuré donc c'est probablement la raison pour laquelle j'ai tellement de problèmes ... mais jusqu'ici tout le contrôle que j'ai fait J'ai fait return this.Json(/* stuff returned form the repository */) afin que je puisse faire une alerte quand il revient au javascript. Quelqu'un sait-il pourquoi j'aurais des problèmes à extraire l'objet utilisateur d'une relation de clé étrangère comme ça?

Ou avez-vous des suggestions pour savoir ce qui ne va pas?

+0

Poster 'fbUid' &' fbUser 'classes, s'il vous plaît –

+0

Dupliquer l'article, répondu ailleurs: http://stackoverflow.com/questions/1225624/how-to-select-an-object-through-a-foreign-key –

Répondre

0

Pour l'instant, avec Entity Framework 1, vous n'obtenez pas de chargement différé automatique, par ex. Si vous souhaitez traverser d'une entité à la suivante, vous devez soit faire un .Include("OtherEntity") sur votre sélection pour inclure ces entités dans la requête, ou vous devez appeler explicitement .Load("OtherEntity") sur votre EntityContext pour charger cette entité.

Il s'agissait d'une décision de conception de l'équipe EF de ne pas prendre en charge le chargement différé automagique, car ils la jugeaient trop dangereuse; ils voulaient que l'utilisateur comprenne clairement qu'il comprenne/charge un deuxième ensemble d'entités.

En raison de la forte demande populaire, le prochain EF v4 (qui sortira avec .NET 4.0 vers la fin de 2009) prendra en charge le chargement différé automatique - si vous souhaitez l'utiliser. Vous devez activer explicitement car il est désactivé par défaut:

context.ContextOptions.DeferredLoadingEnabled = true; 

Voir quelques articles sur cette nouvelle fonctionnalité:

0

Je ne sais pas si c'est ce que vous demandez, mais je fais une jointure comme ça;

var votes = from av in dc.ArticleVotes 
    join v in dc.Votes on av.voteId equals v.id 
    where av.articleId == articleId 
    select v; 

Est-ce que cette aide ou je suis hors base?

+0

Je comprends un peu ce que vous faites ... mais si je le fais.aspnet_Users ne devrait pas faire toute l'exécution sql pour moi de récupérer cet utilisateur? (Si aspnet_Users est une clé étrangère). Pourriez-vous expliquer un peu plus? – Matt

+0

La [seule] explication que je peux vous donner est que je fais ce qui précède pour contourner exactement le même problème que vous avez. Vous pouvez utiliser quelque chose comme this._Items = new EntitySet (nouvelle Action (this.attach_Items), nouvelle Action (this.detach_Items)); et puis tous les autres trucs mais je n'ai jamais vraiment eu ce travail et je devais aller de l'avant. Si vous avez un LinqToSql.dbml alors vérifiez ce qui précède et vous verrez ce que je veux dire. – griegs

+0

Il est presque jamais correct d'utiliser join dans LINQ to Entities. Vous utilisez presque toujours des relations à la place. –

Questions connexes