关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)
关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)
1. 业务主键和平台主键
业务主键是业务资料表的主键,作为主键或其它表的外键使用,如CustomerCode, StockCode或销售订单号码SONO等作为业务主键。平台主键是基于业务表存在复合主键而设计的,作为开发框架内部使用的主键,不参于业务关联运算,不在界面显示,不体现报表等特点。
平台主键主要用途是数据更新时提供给SQL命令生成器生成SQL脚本,如生成:Where RowID=@RowID,
RowID是指平台主键,目的是生成Where条件,替换冗余的复合主键生成的多个AND关系的Where条件,
如:Where SupplierCode=@SupplierCode AND StockCode=@StockCode
重点:
a) 通常存在复合主键的资料表必须定义一个平台主键,如:RowID。
b) 当资料表只有一个主键时,只要定义业务主键即可,如:SONO。
2. 复合主键的处理
跟据业务的需要,有些数据表需要定义复合主键,为了使程序设计或SQL关联查询简单化,建议有复合主键的资料表定义一个唯一主键,如RowID,作为平台主键(PK),类型:VARCHAR(32),可以在客户端新增时赋值:
C# Code:
DataRow["RowID"]=Guid.NewGuid().ToString().Replace("-","");
DataRow["RowID"]=Guid.NewGuid().ToString().Replace("-","");
CSFramework V2.2版:参考系统管理模块tb_CompanyInfo表的ORM定义。
3. isid 字段
isid字段是开发框架定义使用最多的字段名,指的是自增字段(Is Identity),可以作为记录的主键使用,但不可以作为外键使用。
isid可以作为明细表的主键,明细表的外键通常是单据号码或GUID。
在以下情况定义isid为主键:
a) 业务主键支持修改的情况下。框架内规定业务主键是不可以修改的,如需要修改,必须定义一个isid字段作为数据更新使用的主键(用于生成Where isid=@isid)。如客户资料的业务主键是CustomerCode,界面上需要支持修改,这种情况下必须定义isid为主键。
b) 数据字典的主键。通常数据字典的主键是编号,比如货币:CurrencyCode,客户:CustomerCode,单位:UnitCode,但这些都是业务主键,作为其它业务表的主外键关联使用的。这些数据字典可以定义一个isid字段作为数据更新使用的逻辑主键。
c) 建议不要将isid定义为主键,而采用业务主键和平台主键。
在以下情况定义isid为主键:
a) 业务主键支持修改的情况下。框架内规定业务主键是不可以修改的,如需要修改,必须定义一个isid字段作为数据更新使用的主键(用于生成Where isid=@isid)。如客户资料的业务主键是CustomerCode,界面上需要支持修改,这种情况下必须定义isid为主键。
b) 数据字典的主键。通常数据字典的主键是编号,比如货币:CurrencyCode,客户:CustomerCode,单位:UnitCode,但这些都是业务主键,作为其它业务表的主外键关联使用的。这些数据字典可以定义一个isid字段作为数据更新使用的逻辑主键。
c) 建议不要将isid定义为主键,而采用业务主键和平台主键。

参考文档:
关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)|C/S开发框架
Winform软件快速开发平台 - 关于数据权限,表格列权限控制两种解决方案
C# Winform DataGridView设置选定的区域为不可编辑
关于Winform框架及C/S快速开发平台
关于Winform开发框架桥接功能
ISID字段介绍,能直接用ISID字段作为主键使用吗?|C/S开发框架
开发框架复合主键使用方法 - 采用RowID字段唯一键值
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
C# Winform项目多语言实现(支持简/繁/英三种语言)
软件界面图片提供者策略 | MiniFramework蝇量框架 | Winform框架|C/S开发框架
ORM_TableAttribute类详解:资料表特性定义
ORM_FieldAttribute类详解:字段特性定义,框架内核根据此特性自动生成SQL脚本
C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
Winform开发框架 | 表格编辑窗体权限控制|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)|C/S开发框架
Winform软件快速开发平台 - 关于数据权限,表格列权限控制两种解决方案
C# Winform DataGridView设置选定的区域为不可编辑
关于Winform框架及C/S快速开发平台
关于Winform开发框架桥接功能
ISID字段介绍,能直接用ISID字段作为主键使用吗?|C/S开发框架
开发框架复合主键使用方法 - 采用RowID字段唯一键值
Winform+DevExpress框架之独立图片存储解决方案|C/S框架网
C# Winform项目多语言实现(支持简/繁/英三种语言)
软件界面图片提供者策略 | MiniFramework蝇量框架 | Winform框架|C/S开发框架
ORM_TableAttribute类详解:资料表特性定义
ORM_FieldAttribute类详解:字段特性定义,框架内核根据此特性自动生成SQL脚本
C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
Winform开发框架 | 表格编辑窗体权限控制|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
其它资料:
什么是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内容管理系统 |
在线客服
