表结构修改>新增主键或者不能为空的列


案例

我们有一个排班记录表,先前设计的是isid作为主键,并且设置为自增列

表结构修改>新增主键或者不能为空的列

现在有新需求,要新增一个id列,并设置为主键(不能为空)

这时候,如果表中已经存在数据,就会报错,应为id作为主键,又没有给默认值,此时我们正确的做法是,分为两步

修改生成的脚本:

C# 全选
// 1. 添加 ID 列
migrationBuilder.AddColumn<long>(
	name: "id",
	table: "data_PaiBanJiLu",
	type: "bigint",
	nullable: false,
	defaultValue: 0L,
	comment: "主键,雪花ID");

// 2. 设置ID 列默认值
string sql = @"
	update data_PaiBanJiLu set id=t1.rowId from 
	(
		select isid,row_number() over (order by isid) as rowId
		from data_PaiBanJiLu
	) as t1
	where data_PaiBanJiLu.isid=t1.isid";
migrationBuilder.Sql(sql);

// 3. 删除旧主键
migrationBuilder.DropPrimaryKey(
	name: "PK_data_PaiBanJiLu",
	table: "data_PaiBanJiLu");

// 4. 添加新主键
migrationBuilder.AddPrimaryKey(
	name: "PK_data_PaiBanJiLu",
	table: "data_PaiBanJiLu",
	column: "id");

第1,3,4的代码是生成迁移时自动生成的代码, 第2步我们插入一行sql脚本,自动更新ID值,然后就可以给ID值设置为主键

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:接口返回状态
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

结构修改>新增或者
.NET Core 项目调试时候修改代码
formsubmit()方法触发onsubmit事件解决方法,兼容各版本浏览器。
YESWin开发框架权限设计相关结构说明
如何设计高效会计科目管理功能:基于ERP系统数据库结构
如何新增或更新
RazorEngine使用@Html.Raw引起连锁反应以及解决办法
SQL字符串逗号隔开结构ufn_SplitEx
SAP S/4HANA FICO 入门 60:GST 条件技术、Business Place 与数据
教你三种方式修改 CentOS 主机名(永久修改迷路
SAP S/4HANA MM模块培训 49 - 自动科目确定:MM-FI集成、事务与OBYC
C#8.0 可引用类型
SAP S/4HANA MM模块培训 16 - MRP控制参数:处理、计划模式与过程控制
SAP S/4HANA MM模块培训 08 - 外部服务采购流程与服务数据
Epicor页面根据不同权限显示不同表格
SqlServer PIVOT函数快速实现行转,UNPIVOT实现转行
SAP S/4HANA MM模块培训 32 - MM组织结构定制:公司代码、工厂与采购组织
C# LINQ中SUM,MAX,MIN时如果数据,报错NULL
SAP S/4HANA MM模块培训 43 - 制造商零件编号MPN:数据、采购控制与AMPL
SAP S/4HANA MM模块培训 04 - 物料数据、物料类型与MM01创建