实现操作临时存储的优雅方式 - ASP.NET

时间:2009-03-25 21:27:54

标签: c# asp.net json

我有一个用户控件,在加载时我从数据库中获得了一些数据。用户可以以不同方式操作数据(CRUD)。操纵数据的过程可能导致服务器端事件或客户端。然后页面上有一个保存按钮,最终处理临时数据并将其写入数据库。

我正在寻找一种优雅的方法。我的想法是:

  • 在加载时,使用隐藏变量并将数据(在此处以自定义数据结构的形式)序列化为JSON
  • 在任何操作数据的事件(服务器端/客户端),反序列化,执行操作并序列化回隐藏变量
  • 在最后保存时,反序列化为首次加载的数据结构并点击数据库

由于所有这些都发生在ASCX.CS中,我无法真正使用酷OOP的东西(对于多态,如果将来他们决定不应该在临时存储中而不是在数据库中完成这些操作)

我几乎坚持使用一组具有一组静态方法的方法,这些方法对每个操作都有一个方法。在后面的代码中,当需要处理事件时,我将不得不序列化/反序列化数据。

编辑 - 任何帮助?

2 个答案:

答案 0 :(得分:1)

ADO.Net。 在内存数据结构中,您只需要在流程结束时提交。

答案 1 :(得分:0)

最简单的方法可能是在第一次加载页面时将对象存储在视图状态中,让用户操作该对象,然后在用户想要保存时将其保存回数据库。

但是,这种方法的一个问题是,如果多个用户同时编辑同一个项目,最终可能会覆盖数据。

例如

1)用户A加载页面并开始进行更改 2)用户B加载页面并开始进行更改 3)用户A按保存。更改将保存到数据库中 4)用户B按保存。更改将保存到数据库,覆盖用户A的更改。

您可以通过使用时间戳来保存上次更新的日期和时间,并在提交udpate之前将其与viewstate中的日期和时间进行比较。或者,您可以在有人开始编辑时锁定项目,阻止两个人同时进行更改,但此解决方案可能不太可靠(例如,如果用户在编辑时浏览页面会发生什么)。 p>