Frage

Wenn ich eine Tabelle mit einem Primärschlüssel (AccLinkID) und ein Fremdschlüssel (aspnet_Users UserID), wie kann ich das Objekt, dass die Fremdschlüsselpunkte zur Verwendung von Linq to Entities auswählen.

User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;

hat nicht funktioniert ...

jemand irgendwelche Ideen?

War es hilfreich?

Lösung

Versuchen Sie folgendes:

User myUser = _myDB.AccLinkSet.Include("aspnet_Users")
    .Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;

Andere Tipps

Auch wenn Sie können lösen diese Fügen Sie mit, wie andere vorgeschlagen haben, das ist nicht, wie ich es tun würde. Stattdessen würde ich Projekt, das nie einschließen erfordert:

var q = from al in yDB.AccLinkSet
        where al.LinkID == linkId
        select al.aspnet_Users;

In diesem Fall werden die Benutzer automatisch geladen.

Für jetzt mit Entity Framework 1, die Sie nicht den automatischen verzögerte Laden bekommen, zum Beispiel wenn Sie von einem Unternehmen zum anderen zu durchqueren wollen, müssen Sie entweder eine .Include("OtherEntity") auf Ihrem ausgewählten tun, um diese Einheiten in der Abfrage enthalten, oder Sie müssen explizit .Load("OtherEntity") auf EntityContext rufen, um diese Einheit zu laden.

Dies war eine Design-Entscheidung durch das EF-Team nicht automagic verzögertes Laden zu unterstützen, da sie es als zu gefährlich sein; sie wollten es klar und offensichtlich für den Benutzer machen, die er ebenfalls mit / einen zweiten Satz von Entitäten zu laden.

Aufgrund der hohen großer Nachfrage, die kommenden EF v4 (freigegeben wird mit .NET 4.0 irgendwann gegen Ende 2009) wird den automatischen verzögerte Laden unterstützen - wenn Sie es benutzen wollen. Sie müssen es explizit aktivieren, da es weg ist standardmäßig:

context.ContextOptions.DeferredLoadingEnabled = true;

einige Artikel finden Sie auf dieser neuen Funktion:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top