EF6 (6.0.1) を使用して INSERT を実行すると、本番環境が極端に遅くなります (30 ~ 120 秒)。Device と Trigger の間に多対多の関係があります。デバイスには仮想 ICollection があり、トリガーには仮想 ICollection があります。トリガーは、ほとんどの場合、静的テーブルです (現在は 1 行のみ)。新しいデバイスを作成する必要がある場合は、単一のトリガー行へのマッピングも作成する必要があります。そこで、その行をすばやく検索して、device.Triggers.Add() を実行します。しかし、EF6 が ObjectStateManager.UpdateRelationships や ObjectStateManager.TryUpdateExistingRelationships などの関数にドリルダウンするため、これには永遠にかかるようです。Trigger インスタンスの下にあるすべてのデバイスを更新していると想定しています。これを防ぐにはどうすればよいですか?私がやろうとしていることを行うためのより良い方法はありますか?
ありがとう、ティム
更新:わかりました、可能な回避策を見つけました。関係のトリガーからデバイスへの側を削除した場合 (つまり、トリガーから ICollection を削除した場合) は、実際には必要ないため、流暢な方法を使用して次のように設定します。
modelBuilder.Entity<Device>()
.HasMany(x => x.Triggers)
.WithMany()
.Map(x =>
{
x.MapLeftKey("Device_Id");
x.MapRightKey("Trigger_Id");
x.ToTable("TriggerDevices");
});
しかし、これを行う必要はないようです。誰でもこれに光を当てることができますか?