使用Entity Framework 5将大量数据从旧数据库移动到新数据库

时间:2015-01-26 10:13:16

标签: c# database entity-framework large-data

我正在创建一个应用程序来将数据从旧数据库移动到新数据库(不同的模式)。我正在使用Visual Studio 2013C#Entity Framework 5Microsoft SQL Server 2012。此表Customer包含 4万条记录

private void TransferCustomer()
{
    int counter = 0;

    // Load all old customers
    var oldCustomers = _oldRockDale.customers;

    foreach (var oldCustomer in oldCustomers)
    {
        // Create new customer
        ...

        // Modify something
        ...

        // Add to collection
        <New_database_entity>.Customers.Add(newCustomer);

        // Insert to database for each 1000 records
        counter++;
        if (counter % 1000 == 0)
        {
            <New_database_entity>.SaveChanges();
        }
    }

    // Insert the rest to database
    <New_database_entity>.SaveChanges();
}

这是我的问题:此功能运行得越来越慢。对于前1000个记录,它只需要20到30秒。但它变得越来越慢。然后,到达2000年需要1分钟以上。

我的问题是:

  • 为什么它运行得越来越慢?
  • 有没有更好的方法来传输大量这样的数据?

还有一个信息:正如我在Output窗口中观察到的那样:

  • 只有1行说线程退出代码0
  • 之后,有许多行说线程退出代码 259 即可。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我认为这与DbContext的增长有关。

您可以利用以下帖子:

基本上你必须插入100行的部分,然后重置(再次设置,即:_context = new SomeContext();)每个插入之间的上下文。