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