Я использую EF 6. Я пытаюсь вставить около 200 000 объектов, сохраняя изменения в базе данных после каждых 100 объектов.
Проблема в том, что на сохранение 50 000 сущностей ушло 11 часов, и он все еще отстает. Я запускаю это с помощью WebJobs, и задание публикуется в том же лазурном веб-приложении, что и основной веб-сайт. Является ли проблема из-за того, что WebJob не хватает ресурсов, сохранения после 100 объектов или подхода?
Метод
public void SaveLeadsForBuyer(ISenderModel model)
{
var rowCounter = 0;
foreach (var deliveryRecord in model.Customers.Select(customerModel => new DeliveryRecord()
{
BuyerId = model.Buyer.Id,
AspNetUserId = customerModel.Id,
DeliveryType = model.Buyer.DeliveryType,
CreatedOn = DateTime.UtcNow
}))
{
++rowCounter;
_unit.Repository<DeliveryRecord>().Insert(deliveryRecord);
_unit.SaveChangesPartially(rowCounter, 100);
}
_unit.SaveChanges();
}
Помощник
public static class UnitOfWorkHelper
{
/// <summary>
/// Helper method triggers SaveChanges() after amount of rows provided through "amount" parameter in method
/// </summary>
/// <param name="unit">UnitOfWork object</param>
/// <param name="count">Current amount of rows</param>
/// <param name="saveCount">Amount when to save changes to database</param>
public static void SaveChangesPartially(this IUnitOfWorkAsync unit, int count, int saveCount)
{
if (count % saveCount == 0)
{
unit.SaveChanges();
}
}
}
INSERT SELECT
будет работать в 1000000 раз быстрее, чем EF. - person Akash Kava   schedule 27.03.2016EntityFramework.BulkInsert
< /a> или другие (выполните поиск в своей любимой поисковой системе для массовой вставки Entity Framework — вы найдете несколько, выберите тот, который вам больше нравится) - person marc_s   schedule 27.03.2016