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; 3. 检查主表对应的模型类,ORM_TableAttribute特性的isSummaryTable参数必须是True; 4. dalBaseBusiness.Update方法传入的是DataSet对象,提交的DataSet数据没有包含主表(或者主表没有修改数据),无法获取到主表的主键值(mDocNo变量值=空),导致外键赋值失败,抛出“外键值为空!”异常。 关于第4点(主表),用户反馈的原因是: 主从表结构的必须得有CreationDate\CreatedBy\LastUpdateDate\LastUpdatedBy 这四个字段。特别是主表,如果没有LastUpdateDate\LastUpdatedBy的话,保存时主表没有数据变动,单号不会抛出来(mDocNo变量值=空),所以明细表就会提示外键值为空。 扫一扫加微信
参考文档:
购买C/S开发框架后能升级为VIP吗? C/S开发框架的数据访问层用LINQ吗? C/S开发框架标准版-后台数据更新流程图(例子) C/S开发框架标准版-后台数据更新dalBase类(UML图及方法介绍) C/S开发框架权限是控制到按钮级别的吗? C# C/S开发框架新增数据窗体 C#.Net C/S结构开发框架中数据访问层(DAL)的作用 C/S开发框架V3.0模块引用层次关系表(原) C/S开发框架高级版部分源码截图 C/S开发框架事务处理机制 C/S开发框架企业版数据库改名后需要修改的存储过程、函数和视图 C/S开发框架支持加载数据库的FastReport.NET报表模板文件 - 功能升级 C/S开发框架提供类似SAP系统的快速命令,能快速打开界面窗体(Command模式) C/S开发框架的角色(Role)分类(普通角色、系统角色、数据角色、扩展角色) C/S开发框架教程:使用基础资料(数据字典)的DAL层更新主从表(或多表)数据
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |