gpt4 book ai didi

asp.net-core - Entity Framework Core 1.0 - 如何播种大量数据

转载 作者:行者123 更新时间:2023-12-04 18:01:07 24 4
gpt4 key购买 nike

我正在使用带有核心框架和 Entity Framework Core 1.0(以前称为 Entity Framework 7)的 ASP.NET Core 1.0(以前称为 ASP.NET 5)应用程序。

在此博客中 https://blogs.msdn.microsoft.com/dotnet/2015/11/18/entity-framework-7-rc1-available负责 EF Core 1.0 开发的人员表示,不建议使用类似 ORM 的实体来批量插入大量数据,他们建议使用较低级别的方法(例如 SqlBulkCopy)来执行此操作直接使用数据库提供程序并跳过 Entity Framework 。

我有 120,000 条记录需要播种。目前我正在使用这样的东西:

private readonly MyDbContext _context;

public MyDbContextSeedData(MyDbContext context)
{
_context = context;

}

public void EnsureSeedData(string seedPortsFilePath)
{
SeedPorts(seedPortsFile);
}

private void SeedPorts(string seedPortsFilePath)
{
if (!_context.Ports.Any())
{
var ports = PortsData.GetPorts(seedPortsFile);
List<Port> listPorts = ports.ToList();
// the following statement commented out did not make any improvement
// _context.ChangeTracker.QueryTrackingBehavior = Microsoft.Data.Entity.QueryTrackingBehavior.NoTracking
_context.AddRange(portsRange);
_context.SaveChanges();
}
}

我正在从我的 Startup.cs 调用 EnsureSeedData(path),其中我有一个 MyDbContextSeedData

的实例

我对这种方法的发现和问题:

  1. 插入所有记录需要30多分钟
  2. 我不能使用像 System.Data.SqlClient.SqlBulkCopy 这样的东西,因为核心框架中不存在此类。还有其他选择吗?
  3. Entity Framework 在幕后并根据日志,似乎将 INSERT SQL 语句拆分为 1999 值的 block 。它还似乎关闭了插入之间的数据库连接。我猜这一切都由 Entity 以最有效的方式管理。
  4. 我找不到任何关于为数据库播种的最佳实践的示例。我是否应该在应用程序启动时使用与我的方法类似的方法并从代码中获取种子(假设我找到了一种更快的插入方法)?还是我应该使用某种执行 SQL 脚本的迁移?

任何关于如何使用 ASP.NET Core 框架 dnxcore50 播种大量数据的示例将不胜感激!

最佳答案

我相信您对 System.Data.SqlClient.SqlBulkCopy 有误:

https://github.com/dotnet/corefx/blob/master/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlBulkCopy.cs

按照他们的建议去做,放弃 Entity Framework (无论什么 strip ),如果这将是一项持续的任务,则使用 sql 批量复制。另一方面,你说“种子”——如果这是一次性的事情,直接在数据库中做,然后从备份中恢复以备将来“从头开始”的情况。

关于asp.net-core - Entity Framework Core 1.0 - 如何播种大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com