gpt4 book ai didi

asp.net-mvc - 如何仅更新在 MVC 中已更改的模型的属性?

转载 作者:行者123 更新时间:2023-12-04 07:07:39 25 4
gpt4 key购买 nike

我正在开发一个允许编辑记录的网络应用程序。有可能两个用户同时在同一个屏幕上工作,如果他们都点击保存,我想尽量减少造成的损害。

如果用户 1 请求页面,然后更改地址、电话和联系人详细信息,但在单击保存之前,用户 2 请求相同的页面。

User1 然后单击保存并使用 TryUpdateModel() 更新整个模型,如果 User2 只是将一些详细信息附加到 Notes 字段,当他保存时,TryUpdateModel() 方法将用旧的详细信息覆盖 User1 保存的新详细信息。

我考虑过将模型的所有属性的原始值存储在一个隐藏的表单字段中,然后编写一个自定义的 TryUpdateModel 来仅更新已更改的属性,但这感觉有点太像我们都已经超过的 Viewstate很高兴通过迁移到 MVC 而离开。

是否有我不知道的处理这个问题的模式?

你会怎么处理?

更新:为了回答下面的评论,我正在使用 Entity Framework 。

安东尼

最佳答案

除非您对在这种情况下发生的事情有任何特殊要求(例如锁定记录,这当然需要一些功能来在用户决定不进行更改的情况下取消锁定)我建议正常的方法是乐观锁:

您执行的每次更新都应检查记录在此期间是否未更改。

所以:

  • 将整数“版本”属性或 guid/rowversion 放在记录上。
  • 确保它包含在 html 的隐藏字段中,因此随任何提交返回;
  • 执行更新时,请确保(数据库)记录的版本/guid/rowversion 仍然与隐藏字段中的值相匹配 [如果您决定继续更新,则在进行更新时将“版本”整数加 1 ]

  • 类似的方法显然是在记录上使用日期/时间戳,但不要这样做,因为在系统时钟的精度范围内,它是有缺陷的。

    [我建议你可以在别处找到对整个方法的更全面的解释。当然,如果您要谷歌搜索有关 NHibernate 版本功能的信息...]

    关于asp.net-mvc - 如何仅更新在 MVC 中已更改的模型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878245/

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