【发布时间】:2014-01-13 23:51:40
【问题描述】:
如果一个对象有多个列并且程序只更新一列,LINQ 是否更新数据库中的所有列,无论它们是否更改,还是只更新更改的列?
示例类:
MyObject
{
int ID {get; set}
string Field1 {get; set}
string Field2 {get; set}
string Field3 {get; set}
string Field4 {get; set}
string Field5 {get; set}
}
现在,我从 db 中获取一个记录并只更改一个字段
var myObject=
(
from x in db.TableName
where x.ID == 12345
select x
)
.Single();
myObject.Field1 = "something";
db.SubmitChanges();
SQL 查询是对所有列执行更新语句还是仅对 Field1 列执行更新语句?
【问题讨论】:
-
我想编译的更新语句适用于所有列。 (您可以分析数据库交互以确定确定,但我 99% 确定它是所有列。)这有什么不同吗?如果是这样,我怀疑设计中还有其他问题......
-
这实际上是一个更理论的问题?如果一个表中有 300 列,而我只需要更新一个怎么办?
-
单个表中的 300 列对我来说意味着存在数据库设计问题。 300 列对于数据仓库之类的东西可能有意义,但您通常不会像使用事务数据库那样使用 ORM 与数据仓库进行交互。关键是,ORM 正在按原样和整体更新对象。当然可以让它比这更细化,但我怀疑投资回报率是负数。
-
如果您更新 1 或 500 列,请告诉我性能下降的地方。
-
@ebyrob 我不相信 EF 在更新时会向数据库发送删除和插入语句。但是当您进行更新时,SQL Server 会在内部进行删除和插入。
标签: c# sql-server linq entity-framework