【发布时间】:2013-11-26 11:48:02
【问题描述】:
在使用 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");
});
但看来我不应该这样做。任何人都可以对此有所了解吗?
【问题讨论】:
-
蒂姆,只是重复我在Codeplex 中所说的话:我们尝试复制您在此处描述的场景,但我们无法获得您报告的任何结果,所以如果您能提供我们将不胜感激完整的复制品。
标签: entity-framework entity-framework-6