【问题标题】:Mark a Business Object as dirty?将业务对象标记为脏?
【发布时间】:2011-04-04 15:51:27
【问题描述】:

我将复选框列表绑定到 List 的业务对象集合。当在我的复选框列表中选中一个项目时,我想将选定的业务对象标记为脏。

  1. 如何在行单击时获取当前业务对象并更改其属性?
  2. 另外,这在多用户环境中将如何形成?

【问题讨论】:

  • 这是在我取得了一些进展时参考了以下线程。stackoverflow.com/questions/3581791/…
  • 这不是答案,实际上可能没有帮助,因此请谨慎使用,但您是否考虑过工作单元设计模式。当用户正在编辑它们时,您可以一次性将更改发送到服务器,然后将更改通知任何其他连接的客户端?

标签: c# asp.net business-objects


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 谢谢艾莉森。不会用 IS Dirty 和 ISNEW 创建基类来解决问题。这样每个类都会继承基础,并且不需要在保存时将 ISDIRTY 设置回 false ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2010-10-17
    • 2015-10-30
    • 2013-07-07
    相关资源
    最近更新 更多