如何欺骗性更新标识栏?

时间:2015-10-16 03:48:28

标签: c# sql entity-framework identity

在表中,每次添加行时都会有一个标识列递增1(最低值为1)。现在,有一个新的要求 - 我们需要实现软删除。

所以,我的想法是基本上将任何轻微删除的行乘以-1。这样可以确保唯一性,并在活动和轻微删除的项目之间划清界线。

update Things set Id = -101
where Id = 101

你知道吗,愚蠢的电脑不让我这样做。建议的解决方法是:

  1. 替代专栏
  2. 执行更新
  3. 备用专栏
  4. 对我而言,它似乎是一个Q& D.但是,我能看到的唯一选择是添加一个带有删除状态的新列。

    我正在使用EF来执行额外的工作,当我更改身份的值并存储它时,该软件非常友好地为我思考并且实际上创建一个新的行(具有递增设置的标识,既不是原始标识,也不是它的否定)。

    我该如何解决这个问题?

1 个答案:

答案 0 :(得分:8)

我强烈建议您不要使用任何其他含义来超载您的标识列。第一次查看数据库表的人无法知道否定ID意味着"已删除"。

引入新列Deleted BIT NOT NULL DEFAULT 0没有这个缺点。这是不言自明的。它的成本几乎为零:在大数据时代,额外的BIT列不会填满你的硬盘。

所有这一切,如果您仍然想要这样做,您可以在SET IDENTITY_INSERT dbo.Things ON之前尝试UPDATE。 (但我目前无法验证这是否有效。)