有人贴出了答案,但删除它之前,我可以添加评论。所以这里是他们的答案加我自己的答案。
是的,简而言之,它只会更新更改的列。这假定你正在使用上下文(不完全确定这是什么意思)
为了测试这个,我使用了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,并且只在需要时更新。
请参阅[这个答案](http://stackoverflow.com/questions/1412863/how-do-i-view-the-sql-generated-by-the-entity-framework/20751723#20751723)关于如何查看EF生成的SQL –
这取决于您如何使用EF。如果您正在修改的实体已连接,则它只会更新已更改的列。如果未保存,并且在保存之前未检索当前值,则将更新除主键以外的所有列。 – jrummell