表结构修改>新增主键或者不能为空的列
案例
我们有一个排班记录表,先前设计的是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开发框架网发布内容,转载请附上原文出处连接
YESWEB 张国生