【发布时间】:2011-07-10 16:25:45
【问题描述】:
我目前正在开发一个使用 Entity Framework 4.1(代码优先)和 SQL Server CE 4.0 的应用程序。我真正喜欢 SQL Server CE 4.0 的新功能之一是计算值。
但是在将旧数据导入我的新数据存储系统(大约 50000 个条目)时,我遇到了一些性能问题。这是我的第二个实现。第一个版本使用 Entity Framework 4.0 和 SQL Server CE 3.5。但是这些实现之间存在巨大的性能差异。代码第一个实现大约需要一个小时来导入条目,另一个实现只需要几分钟。
大部分时间花在SaveChanges 方法上。我将问题追溯到[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 属性。如果我使用[DatabaseGenerated(DatabaseGeneratedOption.None)] 并实现我自己的密钥生成(作为一种简单的解决方法),性能将回到第一次实现的水平。
这是一个已知问题吗?有没有办法解决这个性能问题?还是生成我自己的密钥?
【问题讨论】:
-
这里有两个关于 EF 4.1 中的批量插入的问题/答案:stackoverflow.com/questions/5943394/… 和 stackoverflow.com/questions/5940225/… 关键主要是禁用自动更改检测。虽然我看不到与
DatabaseGeneratedOption的关系,但无论如何它可能会有所帮助。 -
禁用 AutoDetectChangesEnabled 并没有真正提高我的性能(但我这样做了)。不使用 DatabaseGeneratedOption.Identity 的加速要高得多。
标签: c# entity-framework-4.1 sql-server-ce-4