Wenn das Entity Framework einen ObjectContext für zwei Datenbanktabellen (sagen wir Table1 und Table2) generiert, die mit einer Many-to-Many-Beziehungstabelle verbunden sind, erstellt es kein Objekt für die XRef-Tabelle, sondern entscheidet sich stattdessen für Sammlungseigenschaften an jedem Ende der Beziehung. Also auf Table1 haben Sie EntityCollection Table2s
und auf Table2 haben Sie EntityCollection Table1s
. In den meisten Fällen ist das eigentlich ziemlich gut...
In diesem Szenario habe ich jedoch eine Liste von Ganzzahlen, die die Datenbank-IDs der Table2-Zeilen darstellen, die in der Table1.Table2s-Sammlung sein sollten.
Ich sehe keinen Weg, diese Sammlung einfach mit den Entity-Schlüsseln zu setzen, daher stecke ich fest und wähle diese in den ObjectContext aus, was bereits eine Menge Arbeit ist, die umsonst gemacht wird. Ich ließ mich hoffen, dass LINQ-to-Entities die Ausführung intelligent verschieben und alles auf dem SQL-Server ausführen wird, wie ich es gerne hätte (obwohl mein Where-Statement Contains verwendet, das möglicherweise korrekt in IN() in SQL übersetzt wird). Also kann ich so weit gehen wie:
table1instance.Table2s.Clear();
var table2sToInclude = context.Table2s.Where(
t =>
listOfTable2DatabaseIds.Contains(t.Id));
Aber es gibt kein EntityCollection.AddRange(IEnumerable)
oder ähnliches, auch gibt es keine IEnumerable.ToEntityCollection()
Erweiterungsmethode natürlich, also weiß ich nicht, was ich mit diesen Ergebnissen machen soll. Alles was ich tun kann ist
foreach (var table2 in table2sToInclude)
{
table1instance.Table2s.Add(table2);
}
was lächerlich erscheint und ich weiß, dass es eine Menge unnötiger Auswertung erzwingen wird.
Gibt es einen "richtigen" oder vielleicht "weniger dummen" Weg, dies zu tun?