DevForce是否使用相同的事务进行验证和保存

时间:2014-12-03 19:34:23

标签: validation transactions devforce

我似乎无法在他们的网站或这里找到这个。我希望答案是肯定的。具体来说,我想编写一个Verifier来检查唯一的密钥违规(我知道我必须将隔离级别提高到Serializable)。除非Verifier在与Save相同的事务中运行,否则这将不起作用。

1 个答案:

答案 0 :(得分:1)

DevForce不会使用相同的事务进行验证和保存处理。在EntityServerSaveInterceptor的上下文中,执行授权和验证,然后在执行实际保存时打开TransactionScope。如果您在验证程序中执行查询,它将使用单独的TransactionScope。

您可以在自定义EntityServerSaveInterceptor中进行一些额外的工作来解决此问题。覆盖ValidateSave函数以绕过验证,然后重写ExecuteSave方法以打开TransactionScope,然后在调用基本保存逻辑之前执行验证逻辑。保存期间由DF打开的TransactionScope将在您的TransactionScope中登记。像这样:

public class EntityServerSaveManager : EntityServerSaveInterceptor {

  protected override bool ValidateSave() {
    // will do validation later
    return true;
  }

  protected override bool ExecuteSave() {
    using (var ts = new TransactionScope(TransactionScopeOption.Required, this.SaveOptions.TransactionSettings.ToTransactionOptions())) {
      // Do validation logic now
      ...

      // Now do save
      base.ExecuteSave();
      ts.Complete();
    }
  }
}