Я использую приложение ASP.NET Core 1.0 (ранее известное как ASP.NET 5) с базовой структурой и Entity Framework Core 1.0 (ранее известное как Entity Framework 7).
В этом блоге https://blogs.msdn.microsoft.com/dotnet/2015/11/18/entity-framework-7-rc1-доступные люди, отвечающие за разработку 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();
}
}
и я EnsureSeedData(path)
из моего Startup.cs, где у меня есть экземпляр MyDbContextSeedData
Мои выводы и вопросы с таким подходом:
System.Data.SqlClient.SqlBulkCopy
потому что этот класс не существует в основной структуре. Любая альтернатива? Любой пример о том, как засеять большие объемы данных с использованием платформы ASP.NET Core dnxcore50 , будет оценен по достоинству!
Я считаю, что вы ошибаетесь в System.Data.SqlClient.SqlBulkCopy:
Выполняйте, как они рекомендуют, структуру сущности объекта (любой полосы) и используйте объемную копию sql, если это будет выполняемой задачей. С другой стороны, вы говорите «семя» - если это одно время, просто сделайте это прямо в базе данных, а затем восстановите резервную копию для будущих ситуаций «начать с нуля».