将业务对象标记为脏的?

4

我有一个与Business Object Collection of List<>绑定的复选框列表。当在我的复选框列表中选中项目时,我希望将所选的业务对象标记为“脏数据”。

  1. 我如何在行单击时获取当前业务对象并更改其属性?
  2. 此外,在多用户环境中如何处理?

这是关于以下线程的参考,因为我取得了一些进展。http://stackoverflow.com/questions/3581791/changed-rows-from-list-of-objects - Zo Has
1
这不是一个答案,可能并不实用,所以请谨慎考虑,但你是否考虑过工作单元设计模式?当用户编辑它们时,您可以将更改一次性发送到服务器,然后通知任何其他连接的客户端进行更改。 - JonWillis
2个回答

5
这实际上是一个关于并发性的问题:如何让多个用户修改相同的业务对象,并确保每个编辑都能成功保存。
如果您将对象存储在缓存中,可以创建一个部分对象来包含“IsDirty”布尔属性。当检查项目时,您将相关对象的IsDirty属性设置为true。
处理并发有很多方法,您可以尝试的一种方法是在检查项目时检查IsDirty属性。如果属性为false,则将属性设置为true。如果属性已经为true,则向用户发送错误。一旦对象被保存,您就将IsDirty属性重置为false。
随着您尝试为保存对象创建更复杂的规则,情况会变得越来越复杂。

谢谢Alison。如果创建一个带有ISDIRTY和ISNEW的基类,是否可以解决这个问题?这样每个类都会继承这个基类,就不需要在保存时将ISDIRTY设置回false了。 - Zo Has

0

您可以将列表存储在视图状态/会话状态/缓存中,或在 post-back 时从数据库重新获取,然后可以根据索引标记业务对象。个人而言,我会选择通过包装器方法获取业务对象列表,该方法将查找缓存,如果没有,则从数据库获取 - 这将允许具有较短的缓存过期时间。

在多用户场景中,这将取决于您如何管理并发。请参阅此 article 以快速了解 ASP.NET 中的并发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接