关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)|C/S开发框架

关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)
目录
1. 业务主键和平台主键
【业务主键】
是指业务资料表的主键,作为其它表的外键使用的字段,如:
- 客户编码:CustomerCode,该字段作为外键在其他表定义,如果销售订单主表。
- 产品编码:StockCode,该字段作为外键在其他表定义,如果采购单明细表。
- 销售订单:SONO,单据号码。在客户对账单资料表定义。
【平台主键】
也称为记录主键,统一使用字段名:isid varchar(50)。CSFramework开发框架所有资料表定义的主键。
特别是业务表存在复合主键的情况下而设计,作为开发框架内部主键,isid字段不在界面显示,不体现报表等特点。
平台主键主要作用:
a) 作为记录的主键使用,如SQL命令:
DELETE FROM tb_MyTable Where isid=@isidb) 替换复合主键使用(避免多个AND关系的Where条件)
//复合主键使用
DELETE FROM tb_SupplierGoods Where SupplierCode=@SupplierCode AND StockCode=@StockCode;
//记录主键 isid
DELETE FROM tb_SupplierGoods Where isid=@isid重点:
a) 存在复合主键的资料表必须定义一个平台主键,如:isid varchar(50)。
b) 当资料表只有一个主键时,只要定义业务主键即可,如:SONO。为了统一数据结构,也建议定义isid字段
2. 复合主键简化处理
业务的需要,有些数据表需要定义复合主键,为了使软件设计简单化,SQL关联查询简单化,建议有复合主键的资料表定义一个唯一主键,如 isid,作为平台主键(PK),类型:VARCHAR(32),可以在客户端新增时赋值:
//EF
orderData.isid=IdHelper.GetId();
//ADO.NET
DataRow["isid"]=IdHelper.GetId();3. isid 字段应用
isid字段是开发框架所有资料表统一定义的字段名,isid 是 Is Identity 的缩写,作为记录主键使用。
isid作为明细表的主键,明细表的外键通常是单据号码,如:SONO, 或主表的isid字段 。
以下情况定义isid为主键
a) 业务主键支持修改的情况下。框架默认业务主键是不可以修改的,如需要修改,必须定义一个isid字段作为数据更新使用,更新时的SQL脚本:
//假设客户编码可以修改,在使用业务主键更新的情况下会报错,因为@CustomerCode是修改后的数据
UPDATE tb_Customer Where CustomerCode=@CustomerCode
//解决方案:
UPDATE tb_Customer Where isid=@isid如客户资料的业务主键是CustomerCode,界面需要支持修改客户编码,这种情况下必须定义isid为主键。
b) 数据字典的主键。通常数据字典的业务主键是编号,比如货币:CurrencyCode,客户:CustomerCode,单位:UnitCode,同时作为其它业务表的外键关联使用的。这些数据字典可以定义一个isid字段作为数据更新使用的平台主键。
c) 业务单据资料表的主表,可以将业务主键字段名(如:SONO)定义为主键。
4、平台主键isid,业务主键的表结构参考
客户资料

CustomerCode 定义为业务主键
isid 定义唯一索引

对应的 EF实体模型:
[Table("dt_Customer")]
public sealed class dt_Customer
{
[Key, Column(Order = 1)]
public System.String isid { get; set; }
public System.String CustomerCode { get; set; }
public System.String CustomerName { get; set; }
}销售订单主表

销售订单明细表

EF实体模型统一使用isid作为主键。


关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)
关于Winform开发框架桥接功能
ISID字段介绍,能直接用ISID字段作为主键使用吗?|C/S开发框架
开发框架复合主键使用方法 - 采用RowID字段唯一键值
软件界面图片提供者策略 | MiniFramework蝇量框架 | Winform框架|C/S开发框架
C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
Winform开发框架 | 表格编辑窗体权限控制|C/S开发框架
C/S Winform开发框架 | 单表基础资料窗体实现主从表资料管理|C/S开发框架
CSFrameworkV6 - Winform开发框架 - Delete方法使用
CSFrameworkV6 - Winform开发框架 - GetLookupData方法使用
CSFramework_Mini 数据库结构 | Winform 蝇量框架|C/S开发框架
DevExpress设置主题切换界面皮肤样式 | SetSkinStyle方法 | Winform 蝇量框架|C/S开发框架
Winform开发框架集成微信、支付宝在线支付功能|C/S开发框架
开发数据查询窗体 | MiniFramework蝇量框架 | Winform框架|C/S开发框架
新增基础资料单表窗体 | MiniFramework蝇量框架 | Winform框架|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内容管理系统 |
在线客服
