Когда Entity Framework создает ObjectContext для двух таблиц базы данных (скажем, Table1 и Table2), связанных с таблицей отношений «многие ко многим», он не создает объект для таблицы внешних ссылок, вместо этого выбирая свойства коллекции на обоих концах таблицы. отношения. Итак, в таблице 1 у вас есть EntityCollection<Table2> Table2s
, а в таблице 2 у вас есть EntityCollection<Table2> Table1s
. В большинстве случаев это даже здорово...
Однако в этом сценарии у меня есть список целых чисел, представляющих идентификаторы базы данных строк Table2, которые должны быть в коллекции Table1.Table2s.
Я не вижу способа просто установить эту коллекцию с помощью ключей сущности, поэтому я застрял, выбирая их в ObjectContext, что уже требует тонны работы без всякой причины. Я позволяю себе надеяться, что LINQ-to-Entities разумно отложит выполнение и выполнит все это на SQL-сервере, как мне бы хотелось (хотя мой «Где» использует «Содержит», который может или не может быть правильно переведен в IN() в SQL). Итак, я могу пойти дальше:
table1instance.Table2s.Clear();
var table2sToInclude = context.Table2s.Where(
t =>
listOfTable2DatabaseIds.Contains(t.Id));
Но нет ни EntityCollection<T>.AddRange(IEnumerable<T>)
, ни чего-то подобного, ни метода расширения IEnumerable<T>.ToEntityCollection<T>()
, конечно, поэтому я не знаю, что делать с этими результатами на данный момент. Все, что я могу сделать, это
foreach (var table2 in table2sToInclude)
{
table1instance.Table2s.Add(table2);
}
что кажется нелепым, и я знаю, что это вызовет много ненужных оценок.
Есть ли "правильный" или, может быть, "менее хромой" способ сделать это?