CSFrameworkV6旗舰版 | 主从子表(多级明细表)设计方案|C/S开发框架
目录
1、前言
主从子表(多级明细表)在我们开发软件时比较常见,主要特点是数据结构至少有三张表以上。包含主表、明细表、二级明细表。
表现的形式多样化,标准格式是主从子表结构(如:ABC结构),主从从子表结构(ABBC)、ABBCC,ABCC结构等。
2、界面效果

3、数据表结构设计

主表 tb_PN

isid:记录主键(雪花id值),标识该记录的唯一性。
PNNO:单据号码
明细A tb_PNDtlA

isid:记录主键(雪花id值),标识该记录的唯一性。
RowID:如果当前表有2级明细表,作为主键使用,用于关联2级明细表。界面新增记录时自动给RowID赋值。
PNNO:单据号码,作为外键,对应主表的PNNO字段。
明细B tb_PNDtlB

isid:记录主键(雪花id值),标识该记录的唯一性。
RowID:如果当前表有2级明细表,作为主键使用,用于关联2级明细表。界面新增记录时自动给RowID赋值。
PNNO:单据号码,作为外键,对应主表的PNNO字段。
二级明细(明细A的子表)tb_PNDtlASub

isid:记录主键(雪花id值),标识该记录的唯一性。
RowID:作为外键,对应父级表的RowID字段。
PNNO:单据号码,作为外键,对应主表的PNNO字段。
4、UI 界面层
如果是业务单据窗体,继承 frmBaseBusinessForm 基类。
基础资料窗体,继承 frmBaseDataDictForm 基类。
C# 全选
public partial class frmPN : frmBaseBusinessForm
{
private bllPN _BLL;
public frmPN()
{
InitializeComponent();
}
private void frmtb_PN_Load(object sender, EventArgs e)
{
this.InitializeForm();
}
//省略代码.....
}5、BLL 业务逻辑层
主从子表的BLL层,因为数据结构和逻辑比较复杂,建议使用单独的类(不需要继承bllBase基类)。
C# 全选
/// <summary>
/// 主从子表(三层表或多明细表)建议使用独立的类,不需要继承bll基类。
/// </summary>
public class bllPN
{
private IBridge_PN _Bridge;
/// <summary>
/// 构造器
/// </summary>
public bllPN()
{
_Bridge = this.CreateBridge();
}
/// <summary>
/// 当前实体数据
/// </summary>
public BusinessData_PN CurrentBusiness { get; set; }
/// <summary>
/// 主表数据
/// </summary>
public tb_PN DataBinder => this.CurrentBusiness.Master;
/// <summary>
/// 创建策略接口实例
/// </summary>
/// <returns></returns>
private IBridge_PN CreateBridge()
{
if (BridgeFactory.IsADODirect)
return new dalPN(Core.Loginer.CurrentUser);
if (BridgeFactory.IsWebApi)
return new WebApi_PN();
throw new Exception(BridgeFactory.UNKNOW_BRIDGE_TYPE);
}
//省略代码......
}6、DAL 数据层
DAL层参考:
C# 全选
[DefaultORM_UpdateMode(typeof(tb_PN), true)]
public class dalPN : dalBaseBusiness, IBridge_PN
{
public dalPN(Core.Loginer loginer) : base(loginer)
{
//
}
//省略代码......
}7、特殊模型设计
界面数据实体模型设计
如点【查看】按钮,需要从数据库读取完整的主从子表数据,数据模型参考:
C# 全选
/// <summary>
/// PN工艺单:主从子表复合模型
/// </summary>
public class BusinessData_PN
{
public BusinessData_PN()
{
this.Master = new tb_PN();
this.DetailsA = new List<tb_PNDtlA>();
this.DetailsASub = new List<tb_PNDtlASub>();
this.DetailsB = new List<tb_PNDtlB>();
}
/// <summary>
/// 主表数据
/// </summary>
public tb_PN Master { get; set; }
/// <summary>
/// 第1个明细表
/// </summary>
public List<tb_PNDtlA> DetailsA { get; set; }
/// <summary>
/// 第2个明细表
/// </summary>
public List<tb_PNDtlB> DetailsB { get; set; }
/// <summary>
/// 三级表
/// </summary>
public List<tb_PNDtlASub> DetailsASub { get; set; }
}DAL层实现
C# 全选
public BusinessData_PN GetDataByKey(string docNo)
{
var data = new BusinessData_PN();
var q_PN = _Database.GetQueryable<tb_PN>();
var q_PNDtlA = _Database.GetQueryable<tb_PNDtlA>();
var q_PNDtlB = _Database.GetQueryable<tb_PNDtlB>();
var q_PNDtlASub = _Database.GetQueryable<tb_PNDtlASub>();
data.Master = q_PN.Where(w => w.PNNO == docNo).FirstOrDefault();
data.DetailsA = q_PNDtlA.Where(w => w.PNNO == data.Master.PNNO).ToList();
data.DetailsASub = q_PNDtlASub.Where(w => w.PNNO == data.Master.PNNO).ToList();
data.DetailsB = q_PNDtlB.Where(w => w.PNNO == data.Master.PNNO).ToList();
return data;
}8、其他设计方案(多层表) 参考
CSFrameworkV6旗舰版 - 基础资料窗体改装主从子表(多级明细表)解决方案
https://www.cscode.net/archive/newdoc/592789651951621.html

参考文档:
CSFrameworkV6旗舰版 | 基础资料窗体改装主从子表(多级明细表)解决方案|C/S开发框架
CSFrameworkV6旗舰版 | 业务单据复制功能,支持复制多级明细表|C/S开发框架
CSFrameworkV6.0旗舰版开发框架升级更新日志|C/S开发框架
CSFrameworkV6旗舰版开发框架 | 集成软件授权认证系统|C/S开发框架
CSFrameworkV6旗舰版|新功能|在线用户查询、设置用户下线|C/S开发框架
CSFrameworkV6旗舰版开发框架 | 集成软件授权认证系统|C/S开发框架
CSFrameworkV6旗舰版|新建业务模块 (VS Project项目)|C/S开发框架
CSFrameworkV6旗舰版 | 多语言及国际化|C/S开发框架
CSFrameworkV6旗舰版 | Oracle数据库笔记|C/S开发框架
CSFrameworkV6旗舰版:获取主菜单、模块菜单、用户有权限的菜单|C/S开发框架
CSFrameworkV6旗舰版 | MySql数据库笔记|C/S开发框架
CSFrameworkV6旗舰版|新增功能|打开模块默认窗体|C/S开发框架
C/S快速开发框架旗舰版CSFrameworkV6.0 | VS开发环境配置|C/S开发框架
CSFrameworkV6旗舰版 | 国际化 | 导入导出多语言资料|C/S开发框架
CSFrameworkV6旗舰版 | AutoUpgrader自动升级程序支持3种数据库|C/S开发框架
CSFrameworkV6旗舰版 | 迭代开发 | 当前导航菜单、模块按钮与活动窗体同步|C/S开发框架
CSFrameworkV6旗舰版 | 基础资料窗体改装主从子表(多级明细表)解决方案|C/S开发框架
CSFrameworkV6旗舰版 | 业务单据复制功能,支持复制多级明细表|C/S开发框架
CSFrameworkV6.0旗舰版开发框架升级更新日志|C/S开发框架
CSFrameworkV6旗舰版开发框架 | 集成软件授权认证系统|C/S开发框架
CSFrameworkV6旗舰版|新功能|在线用户查询、设置用户下线|C/S开发框架
CSFrameworkV6旗舰版开发框架 | 集成软件授权认证系统|C/S开发框架
CSFrameworkV6旗舰版|新建业务模块 (VS Project项目)|C/S开发框架
CSFrameworkV6旗舰版 | 多语言及国际化|C/S开发框架
CSFrameworkV6旗舰版 | Oracle数据库笔记|C/S开发框架
CSFrameworkV6旗舰版:获取主菜单、模块菜单、用户有权限的菜单|C/S开发框架
CSFrameworkV6旗舰版 | MySql数据库笔记|C/S开发框架
CSFrameworkV6旗舰版|新增功能|打开模块默认窗体|C/S开发框架
C/S快速开发框架旗舰版CSFrameworkV6.0 | VS开发环境配置|C/S开发框架
CSFrameworkV6旗舰版 | 国际化 | 导入导出多语言资料|C/S开发框架
CSFrameworkV6旗舰版 | AutoUpgrader自动升级程序支持3种数据库|C/S开发框架
CSFrameworkV6旗舰版 | 迭代开发 | 当前导航菜单、模块按钮与活动窗体同步|C/S开发框架
其它资料:
什么是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内容管理系统 |
什么是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内容管理系统 |
在线客服
