仅保存实体框架4中已更改的字段

时间:2011-09-06 09:44:12

标签: c# winforms entity-framework properties saving-data

我有一个带有一些文本框和一个保存按钮的Windows窗体。加载表单时,文本框中填充了模型中实体的数据。当用户单击保存按钮时,每个文本框中的值将写回实体,然后调用SaveChanges将数据提交到数据库。

我想知道的是检查表单是否包含更改的最佳方法是什么?如果它不包含更改,那么我不需要调用SaveChanges,我可以保存将记录写回数据库。如果它确实包含更改且用户未单击“保存”按钮,则我希望用户确认不需要保存更改。

我想也许我可以更新实体的字段,然后在调用SaveChanges之前检查它的State属性,但是这会失败,因为更新任何字段,即使具有相同的值,也会导致实体被标记为已修改。

所以,我的问题是,在调用SaveChanges之前,检查实际对表单进行了哪些更改的最佳方法是什么?

谢谢,

马特

2 个答案:

答案 0 :(得分:0)

您可以检查实体状态。只需将文本框中的数据保存到实体,并查看 EntityState 是否为 EntityState.Unchanged

详细信息:http://msdn.microsoft.com/en-us/library/system.data.entitystate.aspx

答案 1 :(得分:0)

实际上,即使使用与前一个字段相同的值更新字段也会被视为已修改的实体,在大多数情况下,这是正确的业务规则。

您可以做的是保留用于填充表单字段的原始对象的副本,并使用相等比较器将其与当前对象进行比较。它并不漂亮,但它可以在特定情况下完成工作,在这种情况下,您无法指望对象状态管理器的修改意见。