zoukankan      html  css  js  c++  java
  • ObjectDataSource并发CompareALLValues处理

      我们在使用SqlDataSource进行并发策略的时候比较容易实现,通过设置ConflictDetection值为CompareAllValues,OldValuesParameterFormatString="original_{0}"就可以在SelectCommand,UpdateCommand,DeleteCommand里面进行设置即可。 设计Account(AccountID,AccountUse ,Flag)数据库表 这里以UpdateCommand为例:

    update set AccountUse=@AccountUseFlag=@Flag where AccountID=@original_AccountID and AccountUse=@Original_AccountUse and Flag=@Original_Flag;这样可以很容易地进行SqlDataSource的并发处理。

      然而ObjectDataSource为我们提供了并发控制机制:
    ObjectDataSource 控件有一个属性ConflictDetection,可以设置应用程序中并发处理。

    ConflictDetection 也有两个可选值:

    默认设置为OverwriteChanges 这是最小化的并发冲突设置,在更新和删除的时候不会提供原始数据信息,无法进行并发控制.  
    CompareAllValues 这将给予你最大的灵活性,它将在更新和删除的时候提供原始的数据信息,所以可以进行并发控制。
    请看如下示例:
    用于ObjectDataSource的实体对象类Account类:

    Account实体类

    对于Update方法:

    ObjectDataSource在ConflictDetection= Overwrite Changes的时候要求只把现在更新的字段,以及原来的主键字段(这个名字是根据ObjectDataSource的OldValuesParameterFormatString设置的格式Original_{0}),例如Original_AccountID传进来,以便索引到更新行。

    ObjectDataSource在ConflictDetection=CompareALLValues的时候要求把现在更新的字段以及原来的所有字段全部传递进来。

    ObjectDataSource在DataObjectType设置的情况下,ConflictDetection= Overwrite Changes的时候,仅仅需要一个Account对象变量作为参数,代表更新的值。

    ObjectDataSource在DataObjectType设置的情况下,ConflictDetection=CompareALLValues的时候,需要两个Account对象作为参数,前一个变量Account acc,后一个变量Account Origina_acc,后一个变量记录了原始值。

    对于Delete方法:

    ObjectDataSource在ConflictDetection= Overwrite Changes的时候,只会把Original_AccountID的字段传递过来。

    ObjectDataSource在ConflictDetection=CompareALLValues的时候要求把Original_AccountID ,Original_AccountUse和Original_Flag全部传递过去。

    ObjectDataSource在DataObjectType设置的情况下,仅仅需要传递一个Account类型的变量就可以了。

    如下表所示:

    命令

    DataObjectType

    ConflictDetection

    OldValuesParameterFormatString

    ObjectDataSource的实体对象类Account类提供的方法

    Update

    没有设置

    Overwrite Changes

    Original_{0}

    update(int AccountID,string AccountUse,bool Flag,int Original_AccountID)

    没有设置

    CompareAllValues

    Original_{0}

    Update(int AccountID,string AccountUse ,bool Flag,int Original_AccountID, string Original_AccountUse,bool Original_Flag)

    设置

    Overwrite Changes

    Original_{0}

    Update(Account acc)

    设置

    CompareAllValues

    Original_{0}

    Update(Account acc,Account Orignal_acc)

    Delete

    没有设置

    Overwrite Changes

    Original_{0}

    Delete(int Original_AccountID)

    没有设置

    CompareAllValues

    Original_{0}

    Delete(int Original_AccountID,string Original_AccountUse,bool Original_Flag)

    设置

    Overwrite Changes

    Original_{0}

    Delete(Account acc)

    设置

    CompareAllValues

    Original_{0}

    Delete(Account acc)

     

  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/baozi/p/1586158.html
Copyright © 2011-2022 走看看