在使用 EF6 (6.0.1) 进行 INSERT 时,我看到生产速度极慢(从 30 到 120 秒不等)。我在设备和触发器之间有多对多的关系。Device 有一个虚拟 ICollection,Trigger 有一个虚拟 ICollection。触发器,大部分是静态表(目前只有一行)。当我需要创建一个新设备时,我还需要创建一个到单个触发器行的映射。所以我快速搜索该行并执行 device.Triggers.Add()。但随着 EF6 深入到 ObjectStateManager.UpdateRelationships 和 ObjectStateManager.TryUpdateExistingRelationships 等函数,这似乎需要很长时间。我假设它正在更新我的 Trigger 实例下的所有设备。我该如何防止这种情况发生?有没有更好的方法来做我想做的事情?
谢谢,蒂姆
更新:好的,我找到了一个可能的解决方法。如果我删除关系的 Trigger-to-Device 端(即从 Trigger 中删除 ICollection),因为我真的不需要它,然后使用 fluent 方法设置它,如下所示:
modelBuilder.Entity<Device>()
.HasMany(x => x.Triggers)
.WithMany()
.Map(x =>
{
x.MapLeftKey("Device_Id");
x.MapRightKey("Trigger_Id");
x.ToTable("TriggerDevices");
});
但似乎我不应该这样做。任何人都可以对此有所了解吗?