如果我有更新条目的代码,并且更新只更改了两列,其余的列在输入可能十列的数据后保持相同,是保存所有十列还是仅保存更改的两列?
如果我更新了10列但每个列都没有变化,那么它是否还在进行更新呢?
实施例
col1 | col2 | col3
-----|------|-----
1 |2 |3
将col1更新为1,将col2更新为2,将col3更新为4.是保存所有三个还是仅保存col3,因为它是唯一更改的那个?
如果我将col1更新为1,将col2更新为2,将col3更新为3,则没有任何更改,所以它仍会更新吗?
在那个注释中,我怎样才能看到SaveChanges生成的SQL?
答案 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,是的,只有在需要时才会更新。