具有Cascade删除的表的Acumatica PXParent行为

时间:2018-04-11 22:41:21

标签: acumatica

PXParent属性 创建对父记录的引用,在两个表之间建立父子关系。

有没有人知道是否使用了PXParent,如果这会导致任何问题,那么基础表会有一个Cascade删除集? 我宁愿数据库具有参照完整性,而不是依靠框架应用程序代码来维护它。

1 个答案:

答案 0 :(得分:1)

这是使用PXParentAttribute的目标之一(它将级联删除子项,即使子项是更多子项的父项,它也会删除这些子项)。我会使用PXParent与SQL Server或MySql中的任何配置来实现相同的目标。

如果要使用PXParent设置父子关系并在删除期间保留子项,则应将属性LeaveChildren属性设置为true(默认情况下为false)。

示例:

[PXParent(typeof(Select<Schedule, 
    Where<Schedule.scheduleID, Equal<Current<WZScenario.scheduleID>>>>),
    LeaveChildren = true)]

添加参照完整性,您还可以在(尝试在dac字段上)分配外部引用,以防尝试删除此类引用。例如,库存仓库。如果您有一个使用SiteID(仓库)的DAC,并且想要确定有人试图删除仓库(如果在DAC /表的行中引用),则会阻止删除。您可以使用PXForeignReferenceAttribute执行此操作。以下是IN Transaction dac(INTran)的示例:

[IN.SiteAvail(typeof(INTran.inventoryID), typeof(INTran.subItemID))]
[PXDefault(typeof(INRegister.siteID))]
[PX.Data.ReferentialIntegrity.Attributes.PXForeignReference(typeof(Field<siteID>.IsRelatedTo<INSite.siteID>))]
public virtual Int32? SiteID
{
    get
    {
        return this._SiteID;
    }
    set
    {
        this._SiteID = value;
    }
}

如果您有自定义表格,如果您使用PXParent和/或PXForeignReference指向自定义DACS /字段,则会应用相同的逻辑。

无论哪种方式,框架都应该满足您的需求,并且是我的偏好。