【发布时间】:2015-04-28 07:44:51
【问题描述】:
我想通过 Web API 保存来自 WPF 移动应用程序的编辑值,因为用户从每个字段中跳出选项卡。所以关于 LostFocus 事件。
使用 EF 时,每次更新字段时,整个实体图都会发布(放置)到 Web API。即使我只是为表单上的基本字段创建一个 DTO,我仍然会每次都发布不必要的数据。
我正在考虑忘记 Web API 中的 EF,而只是发布实体 ID、字段名称和新值。然后在控制器中,创建我自己的 SQL 更新语句并使用旧的 ADO.Net 来更新数据库。
这听起来像是回到了 20 世纪甚至 90 年代,但我有什么理由不这样做吗?
我已阅读 this post,这让我倾向于我提出的解决方案。
感谢任何 cmets 或建议
【问题讨论】:
-
仅仅因为您的实体包含很多属性,并不意味着您的 DTO 也必须如此。您可以拥有具有有限属性的特定 DTO。例如。对于
Student实体,您可以拥有一个仅包含FirstName和LastName属性的StudentListItemDTO,前提是它们是显示学生列表时使用的唯一属性。 -
使用 EF 时,每次更新字段时,整个实体图都会发布(放置)到 Web API 你是什么意思?仅发送更新的字段。
-
@Loetn:如果客户端使用与 WebAPI 相同的实体,并且我编辑具有课程集合的学生,则具有课程集合的整个学生实体将被传递回 API 控制器.
-
@Flater:当然,但我的编辑表单可能有 20 个字段,所以如果我更新所有字段,仍然有 19 个不必要的字段返回服务器 20 次。
-
@Graeme:作为第一个想法,您可以只发送 changed 字段,并将其余字段保留为
null。您最关心的是上述数据的安全性、使用的带宽、高效的编码原则……吗?
标签: c# wpf entity-framework asp.net-web-api