实体框架4.1 DatabaseGeneratedOption.Identity性能

时间:2011-07-10 16:25:45

标签: c# entity-framework-4.1 sql-server-ce-4

我目前正致力于使用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)]并实现我自己的一代密钥(作为一个简单的解决方法),性能又回到了第一次实现的水平。

这是一个已知问题吗?有没有办法解决这个性能问题?或者正在生成我自己的密钥?

2 个答案:

答案 0 :(得分:0)

在应用的生命周期内保持ObjectContext /连接处于打开状态。 EF不适用于批量插入,对于max perf使用SqlCeResultSet

答案 1 :(得分:0)

我决定采用“生成自己的密钥”方式作为解决方法。我将密钥生成所需的功能添加到我的DBContext类中。

如果Microsoft对此行为进行了更改,我会切换回自动生成。