Entity Framework Улучшение производительности EF SaveChanges
Как улучшить производительность SaveChanges?
DbContext.SaveChanges - плохой выбор для BULK-операций с точки зрения производительности. Как только вы выйдете за пределы нескольких тысяч записей, метод SaveChanges действительно начнет ломаться.
using (var ctx = new CustomerContext())
{
List<Customer> customers = new List<Customer>();
foreach(var line in lines)
{
var customer = new Customer();
// ...code...
customers.Add(customer);
}
ctx.Customers.AddRange(customers);
ctx.SaveChanges();
}
StackOverflow Вопросы, связанные с
- Проблема производительности Entity Framework, saveChanges очень медленно
- Низкая производительность Entity Framework
- Когда мне следует вызывать SaveChanges () при создании тысяч объектов Entity Framework?
Ответ
Библиотека расширений Entity Framework добавляет метод расширения BulkSaveChanges в DbContext. Он выполняет операции сохранения в 10-50 раз быстрее.
Все изменения, внесенные в контекст, сохраняются в базе данных, но намного быстрее благодаря сокращению количества обращений к базе данных!
BulkSaveChanges поддерживает все:
- Ассоциация (один к одному, один ко многим, многие ко многим и т. Д.)
- Комплексный тип
- Enum
- Наследование (TPC, TPH, TPT)
- Свойство навигации
- Self-иерархии
- И т.п.
using (var ctx = new CustomerContext())
{
List<Customer> customers = new List<Customer>();
foreach(var line in lines)
{
var customer = new Customer();
// ...code...
customers.Add(customer);
}
ctx.Customers.AddRange(customers);
ctx.BulkSaveChanges();
}
Улучшить BulkSaveChanges
BulkSaveChanges уже работает очень быстро, но вы можете сделать это еще быстрее, просто отключив параметр EntityFrameworkPropagation .
EntityFrameworkManager.DefaultEntityFrameworkPropagationValue = false;
При отключении этой опции библиотека больше не использует методы из Entity Framework, а использует внутренние методы из нашей библиотеки Entity Framework Extensions .