Последние измененные свойства при использовании массовых методов Entity Framework Extensions
Я пробую EFE для большой операции синхронизации данных, и так как она будет включать в себя либо большое количество вставок, либо большое количество обновлений, которые я использовал в методе BulkMerge.
Наш старый способ заключался в том, чтобы поместить все в гигантский сложный граф данных, а затем вызвать SaveChanges в нашем контексте. Мы обработали свойства типа "Last Modified", переопределив метод SaveChanges нашего контекста, аналогичный ответу с верхним голосованием (не принято) в этом другом вопросе:
Entity Framework / SQL2008 - Как автоматически обновить поля LastModified для сущностей?
Однако массовые операции EFE не используют SaveChanges, поэтому теперь эти свойства остаются нулевыми. Есть ли способ сохранить эти свойства при сохранении через EFE, не прибегая к триггерам базы данных? Может быть, что-то похожее на событие BulkOperationExecuting, которое позволит вам проверить, над каким типом сущности оперируют, и выполнить соответствующий код соответствующим образом?
1 ответ
Поскольку вы используете BulkMerge, почему бы просто не создать метод расширения, который сначала установит поле аудита?
context.SetAuditField(list)
context.BulkMerge(list)
Вы также можете установить некоторые глобальные события. Это, пожалуй, больше того, что вы ищете
EntityFrameworkManager.PreBulkMerge = (context, entities) =>
{
// ...code...
};