使用 Entity Framework 5 将大量数据从旧数据库移动到新数据库
Posted
技术标签:
【中文标题】使用 Entity Framework 5 将大量数据从旧数据库移动到新数据库【英文标题】:Move large amount of data from old database to new database using Entity Framework 5 【发布时间】:2015-03-24 17:57:41 【问题描述】:我正在创建一个应用程序来将数据从旧数据库移动到新数据库(不同的架构)。我正在使用Visual Studio 2013
、C#
、Entity Framework 5
、Microsoft SQL Server 2012
。此表 Customer
有超过 40,000 条记录。
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 秒。但它会变得慢得多。然后,需要 1 多分钟才能到达 2000。
我的问题是:
为什么运行速度越来越慢? 有没有更好的方法来传输这样的大量数据?更多信息:正如我在Output
窗口中观察到的那样:
非常感谢您的帮助。
【问题讨论】:
由于更改跟踪,它变得越来越慢。 我会尝试禁用它并等待结果。谢谢你的建议:) 更改跟踪最有用。您可能更愿意创建更多的数据库上下文(每 1,000 个实体一个)。 在我看来,四万行远不及“大”...顺便说一句:您可以使用 SQL Server Management Studio 轻松移动和转换数据(如果您的 DBMS 是 SQL Server,而您没有告诉我们)。 是的,我使用的是 SQL Server。我使用 C# 应用程序,因为我不擅长 SQL 并且有些数据需要修改。我和你有同样的想法,40k 行并不大。但为什么我的应用程序运行速度越来越慢? 【参考方案1】:我认为这与 DbContext 的发展有关。
您可以利用以下帖子:
Fastest Way of Inserting in Entity Framework Improving bulk insert performance in Entity framework例如,基本上您必须按 100 行的部分插入,并重置(再次设置,即:_context = new SomeContext();
)每次插入之间的上下文。
【讨论】:
感谢您的有用评论。我会试试:)以上是关于使用 Entity Framework 5 将大量数据从旧数据库移动到新数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用 Entity Framework 5 将特定 id 插入 MySQL 中的自动递增字段
我可以将 Entity Framework Core 6 与 Windows 窗体一起使用(使用 .NET 5)吗?
如何使用 Entity Framework Core 5.0 将复杂 SQL 查询的结果行映射到自定义 DTO?