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

Validation DevForce是否使用相同的事务进行验证和保存,validation,transactions,devforce,Validation,Transactions,Devforce,我在他们的网站上或这里都找不到这个。我希望答案是肯定的。具体来说,我想编写一个验证器来检查唯一的密钥冲突(我知道我必须将隔离级别提高到可序列化)。除非验证器在与保存相同的事务中运行,否则此操作将不起作用。DevForce不使用相同的事务进行验证和保存处理。在EntityServerSaveInterceptor的上下文中,执行授权和验证,然后在执行实际保存时打开TransactionScope。如果在验证器中执行查询,它将使用单独的TransactionScope 您可以在自定义EntitySe

我在他们的网站上或这里都找不到这个。我希望答案是肯定的。具体来说,我想编写一个验证器来检查唯一的密钥冲突(我知道我必须将隔离级别提高到可序列化)。除非验证器在与保存相同的事务中运行,否则此操作将不起作用。

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();
    }
  }
}

因此,作为“立即执行验证逻辑”的一部分,在执行自定义验证之后,我将调用base.ValidateSave()?如果我编写一个UniqueVerifier,“立即执行验证逻辑”是否只是对base.ValidateSave()的调用?您的实例验证程序将由base.ValidateSave自动调用,因此您可以在TransactionScope内调用base.ValidateSave。当我尝试此操作时,我得到以下异常:为TransactionScope指定的事务的IsolationLevel与为作用域请求的值不同。如何为客户端和服务器上的所有实体管理器设置DefaultSaveOptions。如果有关系的话,我用的是鸡尾酒。