2010-08-27 42 views
4

我已将复选框列表绑定到列表<>的业务对象集合。当我的复选框列表中选中某个项目时,我想将选定的业务对象标记为脏。将业务对象标记为脏?

  1. 如何获取行点击当前业务对象并更改其属性?
  2. 此外,如何在多用户环境中塑造这种形状?
+1

需要更多的细节。 – Jamie 2010-08-27 06:57:53

+0

这是在引用以下线程,因为我做了一些进展.http://stackoverflow.com/questions/3581791/changed-rows-from-list-of-objects – 2010-08-30 03:51:24

+1

这不是一个答案,实际上可能不是所以请谨慎使用,但您是否考虑过工作单元设计模式。当用户编辑它们时,您可以一次性发送更改到服务器,然后通知其他连接的客户端进行更改? – JonWillis 2010-09-02 21:21:00

回答

5

这实际上是一个关于并发性的问题:您如何让多个用户修改相同的业务对象,并确信他们的每个编辑都会成功保存。

如果您将对象存储在缓存中,则可以创建一个包含“IsDirty”布尔属性的部分对象。在选中项目时,将相关对象的IsDirty属性设置为true。

处理并发的方法很多,您可以尝试的一种方法是在检查项目时检查IsDirty属性。如果该属性为false,则将该属性设置为true。如果该属性为真,则向用户发回错误。一旦对象被保存,您将IsDirty属性重置为false。

当您尝试使用您创建的用于保存对象的规则更复杂时,事情会变得越来越复杂。

+0

谢谢艾莉森。不会使用IS脏和ISNEW来解决问题。这样,每个类都会继承基础,并且在保存时不需要将ISDIRTY设置为false? – 2010-09-06 05:40:02

0

您可以将列表存储在视图状态/会话状态/缓存中,或者从数据库重新获取回发,然后您可以基于索引标记业务对象。就我个人而言,我会选择通过一个包装器方法来获取业务对象列表,该方法将把它看成缓存,如果没有,然后从数据库中获取它 - 这将允许缓存过期时间很短。

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