gpt4 book ai didi

c# - 为什么要在移动环境中使用 Entity Framework?

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:27 25 4
gpt4 key购买 nike

我想在用户从每个字段中跳出时,通过 Web API 保存 WPF 移动应用程序中编辑的值。所以在 LostFocus 事件上。

当使用 EF 时,每次更新字段时,整个实体图都会发布(放入)到 Web API。即使我只是为表单上的基本字段创建一个 DTO,我仍然会每次都发布不必要的数据。

我正在考虑忘记 Web API 中的 EF,而只是发布实体 ID、字段名称和新值。然后在 Controller 中,创建我自己的 SQL 更新语句并使用旧的 ADO.Net 更新数据库。

这听起来像是回到了 20 世纪 80 年代甚至 90 年代,但我有什么理由不应该这样做吗?

我已阅读 this post这让我倾向于我提出的解决方案。

感谢任何意见或建议

最佳答案

听起来您正试图从拥有 RESTful Web API 转向更像 RPC 的东西。这很好,只要您对实现它的额外麻烦在节省带宽方面是值得的感到高兴。

就技术水平而言,您并没有因为按照您的建议而倒退;我每天都使用 EF,但我仍然经常需要时不时地使用普通的旧式 ADO.NET,这也是它在 CLR 中得到良好支持的原因。所以没有理由不这样做,只要你能熟练地编写 SQL 等。

但是,出于几个原因,我反对你目前的提议

带宽不一定那么宝贵

即使对于移动设备,一次发回 20 或 30 个字段的数据量可能也不是很多。当然,只有您知道您的具体情况是否太多,但考虑到 3 和 4G 网络的广泛可用性,除非这些字段包含大量数据,否则我不认为这是一个问题 - 当然,它是你的用例让你最了解 :)

并发

除非表单实际上是几个可以独立更新的离散对象的表示,否则每次更新字段时发回单独的更改,您将面临设备上出现无效状态的风险。

例如,如果 User AUser B 都在他们的设备上查看同一个对象。这个对象有 3 个字段 A, B, C 因此:

A-"FOO"
B-"42"
C-"12345"

Now suppose User A changes field "A" to "BAR" and tabs out of the field, and then User B changes field "C" to "67890" and tabs.

您的后端现在具有该对象的此状态:

A - "BAR"
B - "42"
C - "67890"

但是,用户 A用户 B 现在对象的状态都不正确!

It gets worse if you also have a facility to re-send the entire object from either client because if User A re-sends the entire form (for whatever reason) User B's changes will be lost without any warning!

通常这就是交换完整状态的 RESTful 机制运作良好的原因;您将整个对象发送回服务器,并根据完整状态来决定是否应该覆盖最新版本,或者返回错误,或者返回提示用户手动操作的状态合并更改等。

换句话说,它允许您有意义地处理冲突。例如,Entity Framework 将通过包含一个特殊类型的列来免费为您提供并发检查;您可以处理并发异常来决定要做什么。

Now, if it's the case that the form is comprised of several distinct entities that can be independently updated, you have more of a task-based scenario so you can model your solution accordingly - by all means send a single Model to the client representing all the properties of all of the individual entities on the form, but have separate POST back models, and a handler for each.

例如,如果表单显示客户主数据及其对应的地址记录,您可以向客户发送单个模型来填充表单,但仅在客户主字段更改时发送客户主模型,并且仅发送地址地址字段更改等时的模型。这样您就可以吃蛋糕了,因为您的 POST 有效载荷较小并且您可以管理并发性。

关于c# - 为什么要在移动环境中使用 Entity Framework?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com