Entity Framework是保存所有内容还是仅保存更改?

时间:2016-12-28 14:27:27

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

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

如果我更新了10列但每个列都没有变化,那么它是否还在进行更新呢?

实施例

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

为了测试这个,我在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,是的,只有在需要时才会更新。