C# 编辑主键

C# 编辑主键,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,如果表中只包含一个主键字段,是否有办法在MVC3中编辑主键。例如,我有一个控制台表,其中控制台名称作为主键,我希望能够对其进行编辑、更改并保存编辑后的值 如果您需要更多信息,请告诉我。一般来说,您不应该编辑主键。SQL Server中的主键上通常有一个聚集的唯一索引,因此编辑主键意味着您可能需要重建索引(可能不是每次,但取决于倾斜) 相反,我会创建一个伪主键,例如SQLServer中的IDENTITY列,并对Name列设置唯一约束。如果表变大,则在int列上检索项也将比在varchar()列上检

如果表中只包含一个主键字段,是否有办法在MVC3中编辑主键。例如,我有一个控制台表,其中控制台名称作为主键,我希望能够对其进行编辑、更改并保存编辑后的值


如果您需要更多信息,请告诉我。

一般来说,您不应该编辑主键。SQL Server中的主键上通常有一个聚集的唯一索引,因此编辑主键意味着您可能需要重建索引(可能不是每次,但取决于倾斜)

相反,我会创建一个伪主键,例如SQLServer中的IDENTITY列,并对Name列设置唯一约束。如果表变大,则在int列上检索项也将比在varchar()列上检索快

更新: 因为有人告诉我没有回答这个问题(即使这是公认的答案),所以可以更改SQL Server中的主键值。但从技术上讲,这不是一个编辑操作,因为引用完整性可能会阻止真正的编辑(我还没有尝试过,所以请随意进行您自己的实验!)

操作过程如下所示:

  • 使用新的PK值向主表添加新行
  • 运行更新操作将所有FK值更改为新的PK值
  • 删除旧的PK行

  • 我也会在交易中运行所有这些。但我要再次声明,我不建议采用这种方法。

    正如aKzenT指出的,在定义主键时,最好始终使用自动编号/标识或序列(Oracle)。对于b-树处理器来说,查找和连接数字键要高效得多,特别是当文本键长到几个字节时。键越小,需要搜索的b树页面也越少

    另一个重要原因是无法修改自动生成的关键点。当使用可修改的文本键时,外键必须采用级联更新,这是许多(如Oracle、DB2)RDBMS不支持的,必须使用触发器定义,这非常复杂


    在您的情况下,用自动生成的主键替换文本键将消除问题。

    张贴您已经尝试过的一些代码。您还应该考虑使用人工主键。将名称作为主键是一种不好的做法。您的问题答案只需更新主键即可。这一点从您的问题中可以明显看出。:)“控制台名称”听起来并不是唯一的,这根本不是问题的答案。即使有些人认为这是一种不好的做法,你也应该为被问到的具体问题提供解决方案。我应该就如何做一些不好的做法提供指导?那没有道理!答案应该引导OP找到正确的最佳实践,这就是我所做的。我的回答确实解决了OP中的问题:你可以编辑列中的值,如果编辑是要求的一部分,你就不应该使用该列作为主键。“我应该就如何做不好的事情提供指导?”我认为是的,你应该这样做。我的意思是,你需要准确回答我的观点。我很清楚,你想引导人们走上正确的道路,但我认为,首先要回答人们的问题,然后作为对原始帖子的补充,甚至是评论,提到还有其他方式来调查事情。有时人们有一个特定的问题,需要按原样解决,而不需要重新设计东西。我已经恢复了否决票,谢谢你的编辑。