C/S开发框架DAL层提交数据报错"外键值为空!"解决方案。
作者:C/S框架网|www.cscode.ne  发布日期:2020/03/30 11:12:09
  C/S开发框架DAL层提交数据报错"外键值为空!"解决方案。

C/S开发框架DAL层提交数据报错

提交数据时发生如下错误:

贴图图片-开发框架提交数据报错外键值为空



UpdateDetailKey方法负责更新明细表的外键值,抛出异常的代码逻辑:


C# Code:

/// <summary>
/// 更新明细表的外键
/// </summary>
/// <param name="detail">明细表</param>
/// <param name="foreignFieldName">外键字段名称</param>
/// <param name="foreignKeyValue">外键值</param>
protected void UpdateDetailKey(DataTable detail, string foreignFieldName, string foreignKeyValue)
{
  
if (detail == null)
  
throw new Exception("明细表不能为空(null)!");
  
  
if (String.IsNullOrEmpty(foreignFieldName))
  
throw new Exception("明细表没指定外键, 请检查表模型定义!");
  
  
foreach (DataRow row in detail.Rows)
  {
    
//仅新增记录才需要更新外键,注意状态的使用
    
if (row.RowState == DataRowState.Added)
    {
      
if (String.IsNullOrEmpty(foreignKeyValue))
      
throw new Exception("外键值为空!");
      
else
      row[foreignFieldName]
= foreignKeyValue;
    }
  }
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761




解决方案:


1. 检查明细表对应的模型类,ORM_TableAttribute特性的isSummaryTable参数必须是false

2. 检查明细表对应的模型类的外键字段,如下图的ARNO,必须设isForeignKey=True;
贴图图片-开发框架提交数据报错外键值为空1

3. 检查主表对应的模型类,ORM_TableAttribute特性的isSummaryTable参数必须是True


4. dalBaseBusiness.Update方法传入的是DataSet对象,提交的DataSet数据没有包含主表(或者主表没有修改数据),无法获取到主表的主键值(mDocNo变量值=空),导致外键赋值失败,抛出“外键值为空!”异常。




关于第4点(主表),用户反馈的原因是:


主从表结构的必须得有CreationDate\CreatedBy\LastUpdateDate\LastUpdatedBy 这四个字段。特别是主表,如果没有LastUpdateDate\LastUpdatedBy的话,保存时主表没有数据变动,单号不会抛出来(mDocNo变量值=空),所以明细表就会提示外键值为空。


C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇