为数据库中新添加的列更新数据,代码优先
Posted
技术标签:
【中文标题】为数据库中新添加的列更新数据,代码优先【英文标题】:Updating data for new added column in database , code first 【发布时间】:2020-01-29 13:54:39 【问题描述】:我的数据库中有一个现有的用户表,其中包含大约一百万条记录。我的数据库是 MS sql server 2016 。我首先工作代码。现在我将为该表添加一个额外的列,其中将包含一个邀请码。 我需要更新所有现有用户的值,以便为该新列提供唯一的邀请码。 我需要做一些只运行一次的东西(可能在种子方法中),因为这些数据将被更新,并且将来创建的任何新用户在注册时都会有它的邀请码。
所以这将适用于老用户,关于性能和速度的最佳方法是什么,我在该表中有太多记录,是在应用程序启动时运行的种子方法还是什么?
【问题讨论】:
您应该在解决方案中包含数据库的版本号,这样当您更新(添加列)时,您就会知道数据库是否有新列。invitation code
是否有某种格式或者可以是 0 到 9999999 之间的数字?
是的,邀请码有一个格式,它应该是一个长度为 6 字符的字符串,由数字和数字混合而成,并且对于每个用户来说应该是唯一的
Users
表中有多少条记录?
一百万条记录
【参考方案1】:
我认为脚本 SQL 将是最好的解决方案,你运行它就完成了。
如果您处于早期开发模式,种子方法将是一种解决方案,因此您可以删除记录并重新运行种子方法,但如果您的数据库稳定,我认为脚本会更好。
【讨论】:
【参考方案2】:1) 使用添加的列创建迁移(您必须将其标记为可为空)
2) 在您所在的位置创建另一个迁移
使用您想要的任何值填充该列。 您可以通过添加自定义 sql 语句来做到这一点
Sql(@"UPDATE YourTableName set YourColumnName = insert logic here")
3) 创建另一个迁移,将列修改为不可为空。
您也许可以在第一次迁移结束或最后一次迁移开始时添加自定义 sql 语句。
【讨论】:
以上是关于为数据库中新添加的列更新数据,代码优先的主要内容,如果未能解决你的问题,请参考以下文章
实体框架代码优先:迁移失败并更新数据库,强制不必要的(?)添加迁移
对于数据类型为numeric或nchar的列,以YYYMM等值更新YEAR数据
从 C# 应用程序更新 MS Access 数据库中新添加的记录时,“并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条”