2016-05-08 6 views
2

Zuerst EF 6-Code verwenden. Ich habe eine Entity-Klasse und eine Name-Klasse und möchte eine Liste aller Entity-Objekte mit ihren jeweiligen Namen abfragen, so dass ich sie in einem Gridview-Steuerelement anzeigen kann.EF LINQ - Abfrage von 2 Tabellen, die mit Fremdschlüssel verknüpft sind?

sind meine Klassendefinitionen sind:

public class Entity 
{ 
    [Key] 
    public int EntityKey { get; set; } 

    public virtual ICollection<Name> Names { get; set; }  
} 

public class Name 
{ 
    [Key] 
    public int NameKey { get; set; } 
    public int EntityKey { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public virtual Entity Entity { get; set; } 
} 

In meinem Data Access Layer, habe ich eine Methode, die alle Objekte aus der Datenbank bekommt:

public List<Entity> GetEntities() 
    { 
     SdmDBContext entityDbContext = new SdmDBContext(); 
     return entityDbContext.Entities.ToList(); 
    } 

aber mit dieser Abfrage, kann ich nicht Abrufen der Namen, die der Entity-Klasse zugeordnet sind. Ich habe versucht, LINQ und Lambda-Ausdrücke, sowie eine .Include-Operation, aber nicht sicher, wie Sie die Syntax richtig zu formulieren.

Wie kann ich die DAL-Methode ändern, um die mit allen vorhandenen Entitäten verknüpften Namen zurückzugeben?

+1

'entityDbContext.Entities.Include zurückzukehren (e => e.Names) .ToList();' Stellen Sie sicher, 'enthalten System.Data.Entity verwendet;' –

+0

zeigen die Code von dem, was Sie versucht haben. Derzeit haben wir keine Möglichkeit zu sehen, warum "Include" nicht effektiv war. –

Antwort

3

Sie Code lädt die Liste der Entitäten in der Tabelle Entität, und mit 'lazy loading' sollte auch verknüpfte Name Sammlungen zurückgeben, wenn Sie darauf zugreifen. Sie deklarieren Ihre ICollection als virtuell, um 'Lazy Loading' zu ermöglichen, da ein Proxy-Objekt erstellt wird, um DB-Anfragen zu stellen, wenn Sie auf etwas zugreifen, das nicht eifrig geladen wurde.

Include ist nur eine Anforderung, verwandte Entitäten durch Verwendung der für das Objekt definierten Navigationseigenschaften zu laden. Sie können Include mit einem Lambda oder einer Zeichenfolge aufrufen, die den Namen der Navigationseigenschaft darstellt, die Sie gerne laden möchten.

Zum Beispiel:

public List<Entity> GetEntities() 
{ 
    SdmDBContext entityDbContext = new SdmDBContext(); 
    return entityDbContext.Entities.Include("Names").ToList(); 
} 
Verwandte Themen