0

Ich versuche, ein Benutzerobjekt von einem Fremdschlüssel-Referenz abzurufen, aber jedes Mal wenn ich versuche abrufen zu tun, so wird nichts zurückgegeben ...Kann nicht Benutzerobjekt aus Fremdschlüsselbeziehungen mit Linq to Entities Aussage

Mein Tisch eingerichtet ist dies wie:

FBUserID long, 
    UserID uniqueidentifier 

so habe ich mein Repository versuchen, den Benutzer zu erhalten, wenn sie die FBUserID vorgesehen ist:

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; 
    } 

ich habe überprüft, dass die uid (FBUserID) i bestanden n ist korrekt, ich habe überprüft, dass die UserID mit der FBUserID übereinstimmt. Und ich habe auch überprüft, um sicherzustellen, dass fbUids.Count() > 0 ...

kehre ich habe fbUids.FirstOrDefault().FBUserID und die richtige FBUserID bekommen, aber jedes Mal wenn ich versuche die aspnet_Users oder aspnet_Users.UserName zurückzukehren, etc ... Ich habe nicht irgendetwas zurückgegeben. (Ich vermute, dass es aus irgendeinem Grund einen Fehler bekommt)

Ich habe kein Debugging eingerichtet, so dass es wahrscheinlich ist, warum ich so viele Probleme habe ... aber so weit die Überprüfung, die ich getan habe Ich habe return this.Json(/* stuff returned form the repository */) getan, damit ich eine Warnung machen kann, wenn es zurück zum Javascript kommt.

Wer weiß, warum ich Probleme haben würde, das Benutzerobjekt aus einer Fremdschlüsselbeziehung wie diesem abzurufen?

Oder haben Sie irgendwelche Vorschläge, um herauszufinden, was los ist?

+0

Beitrag 'fbUid' &' fbUser 'Klassen, bitte –

+0

Doppelte Post, anderswo geantwortet: http://stackoverflow.com/questions/1225624/how-to-select-an-object-through-a-foreign-key –

Antwort

0

Momentan erhalten Sie mit Entity Framework 1 kein automatisches verzögertes Laden, z. Wenn Sie von einer Entität zur nächsten durchqueren möchten, müssen Sie entweder .Include("OtherEntity") auf Ihrer Auswahl ausführen, um diese Entitäten in die Abfrage einzuschließen, oder Sie müssen explizit .Load("OtherEntity") auf Ihrem EntityContext aufrufen, um diese Entität zu laden.

Dies war eine Entwurfsentscheidung des EF-Teams, das automatische verzögerte Laden nicht zu unterstützen, da sie es für zu gefährlich hielten. Sie wollten dem Benutzer klar und deutlich machen, dass er auch einen zweiten Satz von Entitäten enthält/lädt.

Aufgrund der großen Nachfrage wird die kommende EF v4 (die gegen Ende 2009 mit .NET 4.0 veröffentlicht wird) das automatische verzögerte Laden unterstützen - wenn Sie es verwenden möchten. Sie müssen es explizit aktivieren, da es standardmäßig deaktiviert ist:

context.ContextOptions.DeferredLoadingEnabled = true; 

einige Artikel finden Sie auf dieser neuen Funktion:

0

Ich weiß nicht, ob das ist, was Sie fragen, aber ich mache einen Join so;

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

Hat dies geholfen oder bin ich von der Basis?

+0

Ich verstehe, was du machst ... aber wenn ich einen Benutzer mache.aspnet_Users sollte nicht all die sql-Ausführung für mich diesen Benutzer abrufen? (Wenn aspnet_Users ein Fremdschlüssel ist). Könntest du ein bisschen mehr erklären? – Matt

+0

Die einzige Erklärung, die ich Ihnen geben kann, ist, dass ich das obige mache, um genau das gleiche Problem zu lösen, das Sie haben. Sie können so etwas verwenden._Items = new EntitySet (neue Aktion (this.attach_Items), neue Aktion (this.detach_Items)); und dann all die anderen Sachen, aber ich habe das nie wirklich zum Laufen gebracht und musste weitermachen. Wenn Sie eine LinqToSql.dbml haben, dann überprüfen Sie das oben genannte und Sie werden sehen, was ich meine. – griegs

+0

Es ist fast nie richtig, in LINQ zu Entities beizutreten. Sie verwenden fast immer Beziehungen. –