Я вставляю/обновляю большое количество сущностей (~ 5000) во время процесса, и это занимает огромное количество времени (это таймаут на транзакции 5 минут).
Я прочитал, что по умолчанию DBContext.AutoDetectChangesEnabled установлен в ON и вызывает такое поведение (http://www.exsertus.be/2014/10/ef-bulk-performance/).
Насколько я понимаю, Devforce "вроде" инкапсулирует DBC-текст внутри каждого EntityManager. Devforce использовать его собственную реализацию, если я не определяю мой, который я сделал. Я хотел бы знать, как я могу получить к нему доступ, чтобы иметь возможность "играть" с этим свойством AutoDetectChangesEnabled.
Или есть ли другое решение для вставки/обновления/удаления большого количества объектов с помощью Devforce?
С уважением
Поскольку вы определили свой собственный DbContext, вы можете изменить этот параметр свойства в конструкторе DbContext с Configuration.AutoDetectChangesEnabled = false;
Однако я не уверен, насколько это поможет. Если ваше приложение является n-тиром, и вы пытаетесь сохранить ~ 5000 сущностей по проводу, это всегда будет медленным, и вы также столкнетесь с таймаутами связи. Как правило, если вам нужно делать массовые операции, DevForce - это не оптимальный подход.
Я работал с этим инструментом EF " https://www.nuget.org/packages/EFUtilities ", и я получил большое повышение производительности с большими вставками, поскольку он использует массовую копию вместо обычной вставки на объект.
Вы можете проверить документацию Github здесь.
Я использовал его с транзакцией в 17 000 объектов и завершил его через несколько секунд. Проверьте это, чтобы лучше понять и сравнить с EF. http://blog.credera.com/technology-insights/microsoft-solutions/entity-framework-batch-operations-using-ef-utilities/
Образец использования утилиты для вставки списка объектов выглядит следующим образом:
using (var db = new YourDbContext())
{
EFBatchOperation.For(db, db.BlogPosts).InsertAll(list);
}
Надеюсь это поможет.