Entity Framework扩展批量更新方法如何处理默认值?
How does Entity Framework Extended batch Update method deal with default values?
我正在使用 Entity Framework Extended 来执行批量更新,就像下面来自其官方文档 (https://github.com/loresoft/EntityFramework.Extended/wiki/Batch-Update-and-Delete) 的示例一样:
//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
的 属性,这是一个默认为 0
的 int
。初始化 Task
对象时,它的 MyProperty
值将具有默认值 0
。 Entity Framework Extended 如何区分具有 默认值 0 的 MyProperty
,或者如果我试图将所有匹配对象的 MyProperty
设置为它们的默认值为 0,例如new Task { StatusId = 2 , MyProperty = 0}
因为创建的 Task
对象在每种情况下都完全相同?
当你通过这个时:
.Update(t => new Task { StatusId = 2 });
您根本没有创建 Task
对象。您正在传递批处理更新程序正在解析(并且根本不执行)的表达式。 new Task { StatusId = 2 }
永远不会执行。
我正在使用 Entity Framework Extended 来执行批量更新,就像下面来自其官方文档 (https://github.com/loresoft/EntityFramework.Extended/wiki/Batch-Update-and-Delete) 的示例一样:
//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
的 属性,这是一个默认为 0
的 int
。初始化 Task
对象时,它的 MyProperty
值将具有默认值 0
。 Entity Framework Extended 如何区分具有 默认值 0 的 MyProperty
,或者如果我试图将所有匹配对象的 MyProperty
设置为它们的默认值为 0,例如new Task { StatusId = 2 , MyProperty = 0}
因为创建的 Task
对象在每种情况下都完全相同?
当你通过这个时:
.Update(t => new Task { StatusId = 2 });
您根本没有创建 Task
对象。您正在传递批处理更新程序正在解析(并且根本不执行)的表达式。 new Task { StatusId = 2 }
永远不会执行。