我有一个奇怪的问题,当我尝试使用ObjectSet(TEntity).AddObject()来添加一个新实体时,它与正常行为相比非常慢,它需要500毫秒而且只在一个场合发生它我我确定需要一些时间的指令是AddObject而不是SaveChanges。
代码很简单
ObjectEntity obj = businessObj.ExtractEntityObj();
context.ObjectTable.AddObject(ObjectEntity);
我之前对ObjectContext做了一些工作来调用这部分代码,但它并不比我在所有其他操作中所做的更多,它似乎取决于具有相同外键的项目数量是多少存储在数据库中,我知道它听起来很奇怪,但它是唯一一个改变同一指令性能的变量。我还注意到,如果我在新的DataContext上尝试,性能会恢复正常(几毫秒)但是对于架构问题,每次我必须完成某些事情时,我都不能拥有新的DataContext。
有人可以帮助我吗? 感谢
答案 0 :(得分:1)
我解决了我的问题,也许对某人有帮助,这是因为我在该指令之前做了一个简单的查询,这个:
int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID
我仍然不知道为什么但是这条指令将所有“ObjectTable”数据附加到上下文使得它非常慢,“ObjectTable”也是我添加新实体的表。 将ObjectQuery MergeOption设置为NoTracking我已解决了问题
再见
答案 1 :(得分:0)
修改您的查询
int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID
到
int id = context.ObjectTable.FirstOrDefault(t=>t.Something = somethingElse).ID
它不应该有任何显着的性能提升,但为什么要使用Where()
然后使用FirsOrDefault()
。