【发布时间】:2013-01-22 08:07:09
【问题描述】:
我们正在使用 Entity Framework 5 Code First 方法将我们的 MS-Access 数据库迁移到 SQL Server Compact 4.0。我们发现使用数据库生成的整数 ID 非常慢,更糟糕的是,延迟随着数据库的大小呈指数增长。这使得无法使用 Identity 列,并且在与实体框架配对的 SQL Server Compact 4.0 中,此功能的实现似乎很糟糕。
因此,我们进行了一些测试,发现使用客户端生成的密钥将操作插入速度提高了至少 20 倍,插入的指数增长消失了。
现在我们正在寻找一种生成客户端 ID 的最佳方法。使用 GUID 似乎是最安全的选择,但我读到这会对读取操作产生负面影响。是否有使用客户端生成的自动递增整数的策略?
编辑: 我将进一步调查导致该问题的潜在问题。同时,我的真正问题可以回答吗? :-)
编辑2: 令人非常恼火的是,似乎没有人相信在 EF 和 SQL Server compact 4.0 中使用 auto-id 如此缓慢的断言。我在a separate question 上发布了关于这个问题的概念证明,应该很容易重现。
【问题讨论】:
-
我怀疑您的应用程序逻辑或测试方法中存在其他问题。使用 IDENTITY 列生成整数 ID 不应该很慢,也不应该使使用标识列成为不可能。
-
我再次同意@AaronBertrand,他们似乎不太可能得到这么基本的错误
-
@AaronBertrand 同样,似乎很难得到确认这个错误的测试:-)。另见:social.msdn.microsoft.com/Forums/en/adodotnetentityframework/…
-
此问题已在 SQL Server Compact 4.0 版中得到修复
-
为什么不能在 SQL Server 中关闭标识列,使用自动递增的整数 ID 复制数据,然后在 SQL 中打开标识列?您可以使用自动递增的整数告诉 SQL 从何处再次获取。
标签: database entity-framework ef-code-first sql-server-ce identity-column