今天在采访中,我遇到了一个我不知道的问题。作为ASP .Net MVC的新手我除了向专家询问之外别无他法。
“在您的MVC应用程序中,数据存储在RDBMS系统中。在.cshtml页面中,有一个按钮可将现有记录更新到DB中。
现在假设来自Globe的不同部分的两个用户同时尝试更新公共记录。但是,当第二个用户点击提交按钮时,您已经提交了更新。在这种情况下,第二个用户,何时按下提交将无法提交。相反,页面将为第二个用户重新加载更新的信息,丢弃更改。然后只有他才能继续更新“
你怎么能在ASP .Net MVC中实现这个目标?
我认为它也可能来自DB Side编码,但我不知道如何实现相同的目标。
答案 0 :(得分:3)
您需要实施管理concurrency的策略。如何执行此操作在很大程度上取决于应用程序的业务规则以及当两个或更多人尝试更改同一记录时出现的冲突类型。
通常,您会添加一个名为RowVersion
的列,该列将是timestamp
类型。每当您显示要更新的记录时,您还可以选择当前的RowVersion
值,并将其存储在隐藏字段中。更新操作将包含RowVersion
字段,该字段获取新值,但在您提交更新操作之前,将您的RowVersion
值与数据库中的当前值进行比较。如果它们不同,则其他人在您更新记录并尝试更改记录的过程中更新了该行。您可以根据应用程序的业务规则确定如何继续。
答案 1 :(得分:1)
异步任务执行数据库操作,因此即使其他用户尝试更新,第一个进程也会在后台异步运行