求助:使用PXDatabase.Delete删除自定义表数据未触发数据库操作
解决PXDatabase.Delete在TestSDK中无SQL请求的问题
针对你在TestSDK环境下使用PXDatabase.Delete删除自定义表SSINHoldRule行但未触发SQL请求的问题,按以下步骤排查:
先确认目标数据是否存在
先执行查询验证是否有inventoryID=18的记录,无匹配数据自然不会触发删除SQL:var existingRule = PXSelect<SSINHoldRule, Where<SSINHoldRule.inventoryID, Equal<Required<SSINHoldRule.inventoryID>>>>.Select(Base, 18); if (existingRule == null) { return; }修正PXDatabase.Delete的用法
你当前用PXDataFieldRestrict的写法可能不符合预期,试试指定字段类型的写法或更简洁的筛选式删除:// 指定字段数据类型的写法 PXDatabase.Delete<SSINHoldRule>(new PXDataFieldRestrict<SSINHoldRule.inventoryID>(PXDbType.Int, 18)); // 或直接用条件筛选的删除方式 PXSelect<SSINHoldRule, Where<SSINHoldRule.inventoryID, Equal<Required<SSINHoldRule.inventoryID>>>>.Delete(Base, 18);检查TestSDK的事务提交逻辑
TestSDK默认自动管理事务,若代码在未提交的事务中执行,SQL探查器可能看不到最终操作。可以手动强制提交:using (var ts = new PXTransactionScope()) { PXDatabase.Delete<SSINHoldRule>(new PXDataFieldRestrict<SSINHoldRule.inventoryID>(18)); ts.Complete(); // 手动提交事务 }验证TestSDK的数据库连接上下文
确认TestSDK配置的数据库连接字符串指向你预期的数据库,避免因连接到测试空库导致无操作。尝试直接删除实体对象
先查询到目标记录,再通过实体对象执行删除:var ruleToDelete = PXSelect<SSINHoldRule, Where<SSINHoldRule.inventoryID, Equal<Required<SSINHoldRule.inventoryID>>>>.SelectSingleBound(Base, null, 18); if (ruleToDelete != null) { PXDatabase.Delete(ruleToDelete); }
内容的提问来源于stack exchange,提问作者mbargar13
相关产品推荐
相关产品推荐

