EF 更新对象只是因为属性更改还是仅当它具有不同的值时?
我有一个导入,从平面文件到针对 SQL Server 的 EDM,其中很少有记录实际更改(使用相同的导入文件运行无数次),但尽管如此,更新 500 条记录的 SaveChanges 调用需要相当长的时间。我猜测这是因为我在实体对象上设置了每个属性,然后 EF 使用 ReportPropertyChanged
来表示必须在数据库中更新记录。
我实际上是否必须将所有导入记录属性值与实体属性值进行比较,并且仅在它们不同时分配给实体属性,以避免这些冗长的“无所事事”更新?
编辑: Updated 属性的 setter 生成的代码如下所示。我可以看到分配是无条件的,这就是为什么我要询问数据库的 UPDATE 语句的实际生成是否是有条件的。
set
{
OnUpdatedChanging(value);
ReportPropertyChanging("Updated");
_Updated = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Updated");
OnUpdatedChanged();
}
I have an import, from flat file to an EDM against SQL Server, where very few records actually change (running it the umpteenth time with the same import file), but nonetheless the SaveChanges call to update 500 records takes quite long. I'm guessing this is because I set each property on the entity object, and EF then uses ReportPropertyChanged
to signal that the record must be updated in the DB.
Do I actually have to compare all import recort property values to entity property values, and only assign to the entity property when they differ, to avoid these lengthy 'do-nothing' updates?
EDIT:
The generated code for the setter for the Updated property looks like below. I can see the assignment is unconditional, which is why I'm asking if the actual generation of an UPDATE statement to the DB is conditional or not.
set
{
OnUpdatedChanging(value);
ReportPropertyChanging("Updated");
_Updated = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Updated");
OnUpdatedChanged();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您使用生成的实体代码吗?它已经检查值是否相同:
Do you use generated entity code? It already checks if value is same: