DevExpress XAF中的多个OnSaveing事件

DevExpress XAF中的多个OnSaveing事件,devexpress,xaf,Devexpress,Xaf,我正在使用DevExpress-XAF处理一段代码,我注意到如果我使用事件保存代码执行2次,我该如何防止 protected override void OnSaving() { if (PrestamoP != null) { PrestamoP.Prestado -= Monto; PrestamoP.Save(); } else if (PrestamoG != null) { Prestamo

我正在使用DevExpress-XAF处理一段代码,我注意到如果我使用事件保存代码执行2次,我该如何防止

protected override void OnSaving()
{
    if (PrestamoP != null)
    {
        PrestamoP.Prestado -= Monto;
        PrestamoP.Save();
     }
     else if (PrestamoG != null)
     {
         PrestamoG.Prestado -= Monto;
         PrestamoG.Save();
     }

     base.OnSaving();
}

XPO不保证OnSaving方法调用一次。参见本文中的相应注释

我可以看到您正在基于Monto属性的值更改PrestamoP.Prestado属性。如果只执行一次并且仅在第一次指定Monto属性时执行,则此代码是正常的。如果您:

  • 保存此对象而不更改Monto属性
  • 更新早期指定的Monto值
因此,PrestamoG.Prestado属性似乎需要更复杂的逻辑。首先,我将它移动到Monto属性setter,并考虑前面的值(在本例中不要忘记检查IsLoading属性)。其次,我会考虑动态地计算PRESTADO值,而不是存储它的值。这将允许您解决重复业务逻辑执行的问题。请参见此处的示例: