0

Я использую Entity Framework Extended для выполнения пакетного обновления так же, как в примере ниже от официальной документации (https://github.com/loresoft/EntityFramework.Extended/wiki/Batch-Update-and-Delete):Как метод Entity Framework Extended batch Update обрабатывает значения по умолчанию?

//update all tasks with status of 1 to status of 2 
context.Tasks 
.Where(t => t.StatusId == 1) 
.Update(t => new Task { StatusId = 2 }); 

Это работает, но я хотел бы знать внутреннюю работу. Как это относится к значениям по умолчанию для объекта Task. Предположим, что у него есть свойство, называемое MyProperty, которое является int, которое по умолчанию равно 0. Когда инициализируется объект Task, значение MyProperty будет иметь значение по умолчанию 0. Как Entity Framework Extended различает MyProperty с значением по умолчанию 0, или если я пытаюсь установить MyProperty всех согласованных объектов на их значение по умолчанию 0, например. new Task { StatusId = 2 , MyProperty = 0} как созданный объект Task будет точно таким же в каждом случае?

ответ

1

Когда вы передаете это:

.Update(t => new Task { StatusId = 2 }); 

Вы не создаете Task объект на всех. Вы передаете выражение, которое пакетное обновление обрабатывает (и не выполняет вообще). new Task { StatusId = 2 } никогда не выполняется.

+0

О, это часть выражения, а не объект. Теперь это имеет смысл. –

+1

Да, поэтому вы проходите в лямбда ('t =>'), а не просто 'new Task {...}' – Jcl

Смежные вопросы