Asp.net core 实体框架核心1.0-如何为大量数据播种
我正在使用一个ASP.NET Core 1.0(以前称为ASP.NET 5)应用程序,该应用程序具有Core framework和Entity framework Core 1.0(以前称为Entity framework 7) 在本博客中,负责EF Core 1.0开发的人士表示,不建议使用类似ORM的实体批量插入大量数据,他们建议使用较低级别的方法,如SqlBulkCopy,直接使用数据库提供程序并跳过实体框架 我有12万张唱片需要播种。目前我使用的是这样的东西:Asp.net core 实体框架核心1.0-如何为大量数据播种,asp.net-core,sqlbulkcopy,entity-framework-core,seeding,Asp.net Core,Sqlbulkcopy,Entity Framework Core,Seeding,我正在使用一个ASP.NET Core 1.0(以前称为ASP.NET 5)应用程序,该应用程序具有Core framework和Entity framework Core 1.0(以前称为Entity framework 7) 在本博客中,负责EF Core 1.0开发的人士表示,不建议使用类似ORM的实体批量插入大量数据,他们建议使用较低级别的方法,如SqlBulkCopy,直接使用数据库提供程序并跳过实体框架 我有12万张唱片需要播种。目前我使用的是这样的东西: private reado
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();
}
}
private只读MyDbContext\u context;
公共MyDbContextSeedData(MyDbContext上下文)
{
_上下文=上下文;
}
public void encuresedData(字符串seedPortsFilePath)
{
种子端口(种子端口文件);
}
专用void种子端口(字符串种子端口文件路径)
{
if(!\u context.Ports.Any())
{
var-ports=PortsData.GetPorts(seedPortsFile);
List listPorts=ports.ToList();
//以下被注释掉的语句没有任何改进
//\u context.ChangeTracker.QueryTrackingBehavior=Microsoft.Data.Entity.QueryTrackingBehavior.NoTracking
_AddRange(portsRange);
_SaveChanges();
}
}
我正在从Startup.cs调用ensureseddata(path)
,在那里我有一个MyDbContextSeedData
我对这种方法的发现和问题:
System.Data.SqlClient.SqlBulkCopy
的东西,因为核心框架中不存在此类。还有别的选择吗任何关于如何使用ASP.NET Core frameworkdnxcore50播种大量数据的示例都将不胜感激 我相信您对System.Data.SqlClient.SqlBulkCopy的理解是错误的:
按照他们的建议去做,抛弃实体框架(任何条带),如果这是一项正在进行的任务,就使用sql批量复制。另一方面,您说的是“种子”——如果这是一次性操作,只需在数据库中直接执行,然后从备份中恢复,以备将来“从头开始”使用。您是否检查了此操作的瓶颈?您是否执行过任何分析?我不会责怪数据库。插入数十万条记录通常不会超过2-5分钟(假设表没有1k列=])实体框架ORM是瓶颈,而不是数据库本身。不建议对大型插入使用实体。这就是为什么我需要一些替代方案我有一个dotnet5.4类库项目。SqlBulkCopy目前不存在。我知道它是corefx的一部分,但这是否意味着它已经可以用于dotnet5.4?如果是这样的话,在
System.Data.SqlClient
下看不到SqlBulkCopy有什么不对?