我有一份大量的插入工作,例如300000个插入物。

如果我以遗产方式这样做,我只需编写一个带有100个插入语句的块的SQL字符串,然后对DB执行执行权限(每个100个记录)。

每3秒钟左右,这范围约为100个插入物。

现在,当然有单个引号和插入值中的CRLF的问题。因此,与其编写代码以翻一番,依此类推,因为我懒惰,所以我与linq insertonsubmit和一个上下文相处。

而且,这比传统方式多20倍!!!

为什么?

有帮助吗?

解决方案

您不使用正确的工具来工作。 LINQ-TO-SQL和大多数其他ORM(至少实体框架和NHIBERNATE)是针对OLTP方案的,它们不是用于批量数据操作的目的,并且在用于批量数据操作时会缓慢执行。

你应该使用 SqlBulkCopy.

其他提示

我也有同样的问题 InsertOnSubmit() 花很长时间。

但是,使用 DataTableHelper 类(可从下面的链接下载),并且仅更改代码的1或2行,您可以轻松地使用批量插入。

批量插入

例如:

const int RECORDS_TO_INSERT = 5000;

List<Product> recordsToBeInserted = new List<Product>();
using (NorthwindDataContext dc = new NorthwindDataContext())
{
    for (int n = 0; n < RECORDS_TO_INSERT; n++)
    {
        Product newProduct = new Product()
        {
            ProductName = "Product " + n.ToString(),
            UnitPrice = 3999,
            UnitsInStock = 2,
            UnitsOnOrder = 0,
            Discontinued = false
        };
        recordsToBeInserted.Add(newProduct);
    }
    // Insert this List<> of records into the [Products] table in our database, using a Bulk Insert
    DataTableHelper.BulkCopyToDatabase(recordsToBeInserted, "Products", dc);
}

希望这可以帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top