支持主从表BLL单独提交明细表优化UpdateDetailKey方法|C/S框架网
支持主从表BLL单独提交明细表优化UpdateDetailKey方法|C/S框架网
以上代码适合C/S开发框架所有版本,亲爱的用户们请知悉。
有些特殊情况下,我们只需要修改和提交明细表的数据,C/S框架预设提交主从表的(只修改明细表的情况下,主表的一条记录同时提交),基于性能优化与提升用户体验,针对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) return;
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
/// <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) return;
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
主从表BLL继承bllBaseBusiness基类,提交数据是调用BLL.Update(DataSet)方法,DataSet参数预设是最少两个DataTable,优化UpdateDetailKey方法后,您只需要添加明细表DataTable即可。
注意:单独提交明细表时,要确保明细表不能有Added状态的记录,因为DAL层的_UpdateSummaryKeyMode参数预设值=UpdateKeyMode.OnlyDocumentNo(自动生成流水号),此参数是针对主表的主建自动生成流水号码,若违法此规则,保存数据时会抛出异常,提示:外键值不能为空。
参考文档:
1.主从表的主表模型重点参数配置|UpdateKeyMode|ORM Model
2.手动和自动生成业务单据号码UpdateKeyMode详解(1)
3.更新主表的主键模式UpdateKeyMode枚举详解(2)
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网