Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅保存实体框架4中已更改的字段_C#_Winforms_Entity Framework_Properties_Saving Data - Fatal编程技术网

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

C# 仅保存实体框架4中已更改的字段,c#,winforms,entity-framework,properties,saving-data,C#,Winforms,Entity Framework,Properties,Saving Data,我有一个Windows窗体,带有一些文本框和一个保存按钮。当表单加载时,文本框将填充来自模型中实体的数据。当用户单击save按钮时,每个文本框中的值都会写回实体,然后调用SaveChanges将数据提交到数据库 我想知道的是,检查表单是否包含更改的最佳方法是什么?如果它不包含更改,那么我不需要调用SaveChanges,我可以保存并将记录写回数据库。如果它确实包含更改,并且用户没有单击“保存”按钮,我希望得到用户的确认,即不需要保存更改 我想我可以只更新实体的字段,然后在调用SaveChange

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

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

我想我可以只更新实体的字段,然后在调用SaveChanges之前检查其状态属性,但这会失败,因为更新任何字段(即使具有相同的值)会导致实体标记为已修改

那么,我的问题是,在调用SaveChanges之前,检查表单是否已实际更改的最佳方法是什么

谢谢


Matt

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


此处的详细信息:

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


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

您在实体框架中使用的编程风格是什么?首先使用可视化设计器/模型创建数据库?先编码?我必须先使用数据库。谢谢回复。我一直在想,我必须做这样的事情。我感到惊讶的是,这是正确的业务规则,因为有以下原因:如果用户正在对记录进行分页,试图查找某些内容,那么每个记录都必须写回数据库。在我看来,唯一的选择似乎是提示用户并询问他们是否想要保存或实现您描述的系统。或者我的架构完全错了!再次感谢您的回复。谢谢您的回复。不幸的是,单击“保存”时,即使未进行任何更改,我的所有文本框都会写回实体。这意味着所有实体的属性都设置为具有修改状态。