【问题标题】: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 表中有多少条记录?
  • 一百万条记录

标签: c# sql-server database backend code-first


【解决方案1】:

我认为脚本 SQL 将是最好的解决方案,你运行它就完成了。

如果您处于早期开发模式,种子方法将是一种解决方案,因此您可以删除记录并重新运行种子方法,但如果您的数据库稳定,我认为脚本会更好。

【讨论】:

    【解决方案2】:

    1) 使用添加的列创建迁移(您必须将其标记为可为空)

    2) 在您所在的位置创建另一个迁移

    使用您想要的任何值填充该列。
    您可以通过添加自定义 sql 语句来做到这一点

    Sql(@"UPDATE YourTableName set YourColumnName = insert logic here")

    3) 创建另一个迁移,将列修改为不可为空。

    您也许可以在第一次迁移结束或最后一次迁移开始时添加自定义 sql 语句。

    【讨论】: