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


案例

我们有一个排班记录表,先前设计的是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 项目调试时候修改代码
YESWin开发框架权限设计相关结构说明
SQL字符串逗号隔开结构ufn_SplitEx
formsubmit()方法触发onsubmit事件解决方法,兼容各版本浏览器。
RazorEngine使用@Html.Raw引起连锁反应以及解决办法
C#8.0 可引用类型
SqlServer PIVOT函数快速实现行转,UNPIVOT实现转行
C# LINQ中SUM,MAX,MIN时如果数据,报错NULL
Python退出进程后子线程会退出解决方案
C# 7.0 - C# 7.3 中新增功能
C#判断类型是否可
EntityFramework Linq 查询数据获得树形结构
EF并发处理,防止并发修改数据
windows Service 读取app.config AppSettings
Elastic AMP监控.NET程序性
win11右菜单恢复默认显示更多选项
从数据库或者其他位置加载ASP.NET MVC Views 视图 数据库中加载 cshtml
.NET Core 项目 DbProviderFactories.GetFactoryClasses()返回
基础字典管理功能开发-结构设计,模型更新和数据库迁移脚本生成