2017-06-01 6 views
0

Ich spiele zum ersten Mal mit Entity Framework. Ich schreibe folgende einfach Abfrage:Geben Sie alle verwandten Entitäten mit Entity Framework zurück

public List<Request> GetResult(string code) 
{ 
    List<Request> requests = new List<Request>(); 

    using (var db = new Context()) 
    { 
     requests = (from c in db.Requests where c.Code == code select c).ToList(); 
    } 

    return requests; 
} 

Es gibt ein paar verbundenen Unternehmen zum Request Objekt wie eine Results Tabelle, die eine 1-zu-1-Beziehung mit der Request Tabelle hat. Sie kommen jedoch alle null zurück.

Wie kann ich mit Entity Framework abfragen und eine Entität und alle zugehörigen Entitäten zurückgeben?

TIA

+0

Welche Version von Entity Framework verwenden Sie? Und können Sie Ihr 'Request' Objekt posten? – Steve

+0

https://stackoverflow.com/questions/14512285/entity-framework-is-there-a-way-to-automatisch-eager-load-child-entities-wit – spender

Antwort

2

Einzel Abfrage eifrig Laden mit

db.Requests.Where(req => req.Code == code) 
    .Include(req => req.Results) // Joining is performed here 
    .Include(req => req.SomeOtherProperty) 
    .ToList() 

Mehrere Abfragen expliziten Laden

// Hits the database once. 
var requests = db.Requests.Where(req => req.Code == code).ToList(); 
var requestIDs = requests.Select(req => req.ID); 
// Hits the database another time to load your Results property. 
db.Results.Where(res => requestIDs.Contains(res.RequestID)).Load(); 

Wenn verzögertes Laden aktiviert ist, jedes Mal wenn Sie Zugriff auf die Results Eigenschaft Request Liste verwenden, wird eine Abfrage auf der Datenbank ausgeführt, die für Sie zu laden, die in der N führen könnten +1 Problem Lazy Loading ist noch nicht auf EntityFramework Core verfügbar.

+0

Nachdem Sie den System.Data.Entity-Namespace hinzugefügt haben, ist Ihr Beispiel für das Beantworten von Ladevorgängen gelungen. Danke! – Nugs

0

Wenn Sie Objekte wählen

db.Entry(Requests).Reference(p => p.Code).Load(); 

zu verwenden geladen Wenn Sie alle automatisch auf Ihrem Datacontext-Konstruktor laden möchten set

this.Configuration.LazyLoadingEnabled = true; 
+0

'LazyLoadingEnabled' gibt eine neue Anfrage für eine Anfrage aus eine entladene virtuelle Eigenschaft. Diese Eigenschaften werden nicht wie von OP angefordert automatisch geladen. – spender

Verwandte Themen