【问题标题】:How does Entity Framework Extended batch Update method deal with default values?实体框架扩展批量更新方法如何处理默认值?
【发布时间】:2017-02-17 19:03:21
【问题描述】:

我正在使用 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 的属性,它是一个默认为0int。当Task 对象被初始化时,它的MyProperty 值将具有默认值0。 Entity Framework Extended 如何区分具有 默认值 0MyProperty,或者如果我尝试将所有匹配对象的 MyProperty 设置为其默认值 0,例如new Task { StatusId = 2 , MyProperty = 0} 作为创建的Task 对象在每种情况下都会完全相同?

【问题讨论】:

    标签: entity-framework entity-framework-6 entity-framework-extended


    【解决方案1】:

    当你通过这个时:

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

    您根本没有创建Task 对象。您正在传递批处理更新程序正在解析(并且根本不执行)的表达式。 new Task { StatusId = 2 } 永远不会被执行。

    【讨论】:

    • 哦,它是表达式的一部分,而不是对象。现在说得通了。
    • 是的,这就是为什么你传入一个 lambda (t =>),而不仅仅是一个 new Task { ... }
    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2018-12-03
    • 2012-07-11
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多