Entity Frameworkは、多対多の関係テーブルに接続された2つのデータベーステーブル(たとえば、Table1とTable2)のObjectContextを生成する場合、外部参照テーブルのオブジェクトを作成せず、代わりに、関係。したがって、Table1にはがEntityCollection<Table2> Table2s
あり、Table2にはがありますEntityCollection<Table2> Table1s
。ほとんどの場合、それは実際にはかなり素晴らしいです...
ただし、このシナリオでは、Table1.Table2sコレクションに含まれるべきTable2行のデータベースIDを表す整数のリストがあります。
エンティティキーを使用してそのコレクションを設定する方法がわからないため、これらをObjectContextに選択することに固執しています。これは、理由もなく、すでに大量の作業を行っています。LINQ-to-Entitiesがインテリジェントに実行を延期し、SQLサーバー上ですべてを実行することを期待しています(ただし、WhereはContainsを使用しますが、SQLではIN()に正しく変換される場合とされない場合があります)。だから私はまで行くことができます:
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);
}
これはばかげているようで、多くの不必要な評価を強いられることを私は知っています。
これを行うための「正しい」、またはおそらく「ラメの少ない」方法はありますか?