【问题标题】:Does Entity Framework save all, or only save changes?实体框架是保存全部还是只保存更改?
【发布时间】:2016-12-28 14:27:26
【问题描述】:

如果我有更新条目的代码,并且在输入可能十列的数据后,更新只更改了两列,其余列保持不变,它是保存所有十列还是只保存更改的两列?

如果我更新了 10 列,但每一列都没有任何变化,是否会费心进行更新?

例子

col1 | col2 | col3
-----|------|-----
1    |2     |3

将 col1 更新为 1,将 col2 更新为 2,将 col3 更新为 4。是保存所有三个还是只保存 col3,因为它是唯一更改的?

如果我将 col1 更新为 1,将 col2 更新为 2,将 col3 更新为 3,没有任何变化,所以它仍然更新吗?

关于那个注释,我怎样才能看到 SaveChanges 生成的 SQL?

【问题讨论】:

  • 如何查看EF生成的SQL见this answer
  • 这取决于您使用 EF 的方式。如果您正在修改的实体已附加,它只会更新更改的列。如果它没有附加并且您在保存之前没有检索当前值,它将更新除主键之外的所有列。

标签: vb.net linq entity-framework-6


【解决方案1】:

您可以使用 SQL PROFILER(在 SQL Server 或其他 Mysql 工具中)查看 EF 生成的代码 SQL

【讨论】:

    【解决方案2】:

    有人发布了答案,但在我添加评论之前将其删除。所以这是他们的答案加上我自己的答案。

    是的,简而言之,它只会更新更改的列。这假设您正在使用上下文(不完全确定这意味着什么)

    为了测试这一点,我使用了 Trace 的日志。

    Using DB As New wotcDB
        DB.Database.Log = Sub(val) Diagnostics.Trace.WriteLine(val)
    
        Dim Update = (From t In DB.interview_income
                      Where t.ID = IncomeID).First
        Update.Company = If(String.IsNullOrEmpty(txtCompany.Text), Nothing, txtCompany.Text)
        Update.StartDate = If(IsNothing(txtStartDate.DateValue), Nothing, txtStartDate.DateValue)
        Update.EndDate = If(IsNothing(txtEndDate.DateValue), Nothing, txtEndDate.DateValue)
        Update.HWM = If(String.IsNullOrEmpty(cboHWT.Text), Nothing, cboHWT.Text)
        Update.Wage = txtWage.DecimalValue
        Update.Units = If(String.IsNullOrEmpty(txtHourPerWeek.Text), Nothing, CDec(txtHourPerWeek.Text))
        Update.Adj = txtAdj.DecimalValue
        Update.Total = txtTotal.DecimalValue
        DB.SaveChanges()
    End Using
    

    线

    DB.Database.Log = Sub(val) Diagnostics.Trace.WriteLine(val)
    

    将所有生成的 SQL 写入跟踪。当我在没有任何值更改的情况下进行更新时,它不会费心生成更新语句。当我更改一列时,它会生成一个只有该列和键的更新。

    所以,两个答案合而为一。使用该数据库日志查看您生成的 SQL,是的,它只在需要时更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多