【问题标题】:Linq To SQL, Do not SELECT SCOPE_IDENTITY() after INSERTLinq To SQL,INSERT 后不要 SELECT SCOPE_IDENTITY()
【发布时间】:2011-06-16 22:41:01
【问题描述】:

这是对问题 Stop LINQ to SQL from executing select statements after insert 的后续跟进,不知何故仍未得到答复。

我在表中插入 10,000 行,主键由 SQL 服务器自动生成。插入行后,我不需要对它们进行后处理,程序就关闭了。

查看 LINQ to SQL 日志,对于每个 INSERT,都会为 SCOPE_IDENDITY() 生成一个连续的 SELECT 语句。我觉得这会减慢我的程序,我想摆脱它。

如何在没有立即 SELECT 的情况下插入?

【问题讨论】:

  • 在有和没有SELECT SCOPE_IDENTITY() 的情况下,可能值得对 10,000 个INSERTs 进行基准测试,看看这是否真的会减慢您的速度。我对您最初的问题给予了赏金,因为这是一个有趣的问题。
  • 我无法想象这会增加任何重要的时间(在本地/局域网服务器上)。
  • 对此进行基准测试的正确方法是什么?我刚刚尝试使用 SQL Server Management Studio 在我的表中插入 10,000 行。在没有 SELECT 的情况下插入需要 4:23",使用 SELECT SCOPE_IDENTITY() 需要 10:41"

标签: linq-to-sql


【解决方案1】:

如果您担心性能,恐怕您必须完全改变您的方法。

Linq to Sql 不适合批量插入 - 正如您已经注意到的那样,它会一一插入。

由于您没有对它们进行后处理,因此您最好使用 SqlBulkCopy 之类的东西。速度要快很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多