AddObject()方法非常慢

时间:2012-03-01 10:24:42

标签: entity-framework entity-framework-4 linq-to-entities entity-framework-4.1

我有一个奇怪的问题,当我尝试使用ObjectSet(TEntity).AddObject()来添加一个新实体时,它与正常行为相比非常慢,它需要500毫秒而且只在一个场合发生它我我确定需要一些时间的指令是AddObject而不是SaveChanges。

代码很简单

    ObjectEntity obj = businessObj.ExtractEntityObj();
    context.ObjectTable.AddObject(ObjectEntity);

我之前对ObjectContext做了一些工作来调用这部分代码,但它并不比我在所有其他操作中所做的更多,它似乎取决于具有相同外键的项目数量是多少存储在数据库中,我知道它听起来很奇怪,但它是唯一一个改变同一指令性能的变量。我还注意到,如果我在新的DataContext上尝试,性能会恢复正常(几毫秒)但是对于架构问题,每次我必须完成某些事情时,我都不能拥有新的DataContext。

有人可以帮助我吗? 感谢

2 个答案:

答案 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()