在特殊条件下迁移时的默认值EF Core 6.0



正如文档中提供的那样,您可以简单地使用.HasComputedColumnSql().HasDefaultValue()在EntityConfiguration中设置任何类型的默认值,或者使用适当的方法参数在迁移脚本中设置任何种类的默认值。您甚至可以使用诸如NEWID()之类的sql函数来告诉sql为默认值生成随机uniq字符串(其作用类似于Guid().

我的问题是:

我正在尝试将一个新列添加到我已经存在的表中,该表包含重要数据,这个新列将具有随机唯一值,但不具有GUIDS(如在T-SQL中的NEWID()函数中生成的(,类似于Random.Next(0,10)提供的但唯一的值。

我尝试在迁移脚本中使用Random.Next(0,10)编写C#方法来生成随机数,并使用了一些额外的代码来查看是否可以使其唯一,但我似乎做错了,找不到合适的方法。有人知道我该怎么做吗?

因此,为了明确问题:

我想为添加到现有表中的新列生成随机唯一数作为默认值(我的表有大量记录(。

首先,我不会使用Random类来生成唯一的值,因为您会得到重复的数据。

没有现成的功能来实现你所需要的(我知道(,但以下是一种方法

  • 添加带有EF迁移的新列,并将其初始设置为可为null。

  • 运行一些SQL在每个记录上循环,并用递增的值(即1、2、3等(填充这个新列。我可能会创建并调用一个存储过程。

  • 更新新列,使任何新记录自动递增,确保您根据数据将起始编号(示例中为9586(设置为正确的值

    ALTER TABLE yourTable ALTER yourNewColumn INT NOT NULL IDENTITY(9586,1(

这篇文章可能也很有用-如何使用EF迁移将新列添加到现有表中并根据现有列设置值

最新更新