更新表以具有唯一的生成的int(不是主键)

时间:2016-03-23 18:29:29

标签: sql sql-server entity-framework ef-code-first ef-migrations

我想更新现有表,以获得一个唯一的,自动生成的int字段。我如何在实体框架中执行此操作(代码优先)?

更长的解释:

客户希望表中的每条记录都有唯一的标识符作为其他数据库/簿记的参考号。通常我会简单地使用主键,但在这种情况下,主键是敏感信息(设计缺陷,毫无疑问)。

我想更新这个表,以获得一个与身份无关的独特的自动生成的int(我想这不是什么大不了的事)。如果所有现有记录都可以生成值,则可以获得奖励。

另一种解决方案是更改数据库中的所有主键(和任何引用),但这可能更难。不过,我愿意接受其他解决方案。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

EF没有任何原生内容,但您可以generate unique values for using guid's获取属性(使用NEWID()T-SQL函数填充)。

此外,如果您以类似的方式使用SQL 2012+来集成仅数值的属性,则还可以创建新的SEQUENCE

答案 1 :(得分:0)

为了解决这个问题,我最终编写了一个脚本来复制表格中的所有内容,以便为所有人提供新的ID。然后我将任何外键从原始记录移动到副本。然后,我删除了原件。

在这种错综复杂的方式中,我能够将所有ID更改为不太专有的内容,然后可以在其他地方使用该ID而无需担心。

答案 2 :(得分:-1)

如果你想自动生成,自动增量是唯一的解决方案。不是说前端。你可以去寻找独特的财产。

如果您正在谈论像sku#00056这样的自定义编号,那么您必须完成存储过程。

如果你有权访问前端代码,如果有的话。为此而努力。