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


案例

我们有一个排班记录表,先前设计的是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开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:接口返回状态
评论列表

发表评论

评论内容
昵称:
关联文章