【发布时间】:2014-12-03 19:34:22
【问题描述】:
我似乎无法在他们的网站或此处找到此内容。我希望答案是肯定的。具体来说,我想编写一个验证程序来检查唯一键违规(我知道我必须将隔离级别提高到可序列化)。除非 Verifier 在与 Save 相同的事务中运行,否则这将不起作用。
【问题讨论】:
标签: validation transactions devforce
我似乎无法在他们的网站或此处找到此内容。我希望答案是肯定的。具体来说,我想编写一个验证程序来检查唯一键违规(我知道我必须将隔离级别提高到可序列化)。除非 Verifier 在与 Save 相同的事务中运行,否则这将不起作用。
【问题讨论】:
标签: validation transactions devforce
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();
}
}
}
【讨论】: