2012-04-01 9 views
0

Ich habe die folgenden Methoden auf dem Server (RIA-Dienste):EF Wie bezieht man bereits geladene Entitäten?

public IQueryable<Customer> GetCustomers() 
{ 
    return ObjectContext.Customers; 
} 

public IQueryable<Customer> GetCustomersWithInvoicesAndInvoiceItemsAsync() 
{ 
    return ObjectContext.Customers 
     .Include("Invoices.InvoiceItems"); 
} 

Diese Elemente sind auf dem Client als IEnumerable < geladen>, die CollectionA und CollectionB lässt nennen. Mein Problem ist das nächste: Wenn ich einen Kunden in CollectionA hinzufüge/entferne, wird CollectionB dies nicht bemerken. Die Bearbeitung funktioniert wie erwartet, da beide Sammlungen dieselben Entitäten enthalten. Gibt es eine Möglichkeit, Rechnungen separat zu laden und sie im Client zu verknüpfen, sodass ich nur an einer Kundensammlung arbeiten würde und nicht an zwei?

+0

Wenn Ihre Rechnungen eine CustomerId oder ähnliches haben, können Sie die Rechnungen abrufen und mit Kunden verbinden. –

+0

Ja, das ist meine Frage - wie? Bekomme ich das gleiche Ergebnis wie bei der zweiten Abfrage? – Goran

Antwort

0

-Service-Seite (neben der GetCustomers-Methode):

public IQueryable<Invoice> GetInvoicesAndInvoiceItemsAsync() 
{ 
    return ObjectContext.Invoices.Include("InvoiceItems"); 
} 

Client-seitige, nach Kunden und Rechnungen in getrennten Anrufen (wie IEnumerable s) erhalten:

var query = customers.Join(invoices, c => c.CustomerId, i => i.CustomerId, 
    (c,i) => Tuple.Create(c, i)); 

Dieser Willen geben Sie eine Liste von Kunden - Rechnungspaaren. Oder verwenden Sie GroupJoin:

var query = customers.GroupJoin(invoices, c => c.CustomerId, i => i.CustomerId, 
    (c,i) => Tuple.Create(c, i)); 

Dies wird Ihnen eine Liste der Kunden - Rechnungen (Mehrzahl) Paare geben.

+0

Hallo GertArnold, Entschuldigung für die späte Antwort, ich konnte Ihren Rat bis heute nicht ausprobieren. Das Ergebnis ist nicht das gleiche wie das, nach dem ich gesucht habe. Ich erhalte eine Liste von Tuple-Objekten, während ich eine Liste von Kundenobjekten erhalten musste, wie ich in meinem zweiten Beispiel die Abfrage – Goran

+0

verstehe, aber dann müssten Sie die Rechnungserfassung des Kunden ändern. Sie könnten die Rechnungen zu dieser Sammlung hinzufügen, aber ich würde es vorziehen, nicht mit einer Sammlung zu manipulieren, die von EF nachverfolgt wird. Vielleicht können Sie der Klasse Customer eine nicht zugeordnete Rechnungserfassung hinzufügen. –

+0

Sammlungen auf dem Client (ex-Liste ) werden nicht nachverfolgt, nur die Entitäten innerhalb der Sammlung werden nachverfolgt. Die Lösung, die Sie zur Verfügung gestellt haben, besteht darin, einen Kunden in die Tuple-Sammlung zu verpacken, so dass er wiederum keine Verbindung zur ursprünglichen Kundensammlung hat. Wenn ich einen Kunden in die ursprüngliche Kundensammlung aufnehmen möchte, weiß die Tuple-Sammlung nichts darüber. Gibt es dazu keinen anderen Weg, als manuell Elemente hinzuzufügen? – Goran

Verwandte Themen