我有一个代码优先的MVC 5项目,其模型具有一个组合键:
public class XYZ
{
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
//For reporting purposes.
[Key]
[Column(Order = 2)]
public int Version { get; set; }
我试图跟踪每个
XZY
的版本。我只希望Id
属性在版本为1时增加,否则将具有相同ID号和增加版本的新行添加到表中。我不确定如何仅在创建新的
XYZ
而不是新版本时如何使ID自动递增。关于如何仅当我想要新的XYZ
而不是其他版本时如何使Id自动递增的任何建议?版本控制的目的是跟踪不同的条目版本,以便可以回溯历史记录。我当前的问题之一是该项目正在进行中,并且由于设计欠佳和/或缺乏知识(以前没有人先做过Web开发人员的代码),我不愿意更改数据库的组织方式。
有用的项目信息:Visual Studio 2013,SQL Server 2012,ASP.Net MVC 5 C#。
最佳答案
您不能为此使用IDENTITY
列。您可以将SEQUENCE
与手动T-SQL代码一起使用,但是这很繁琐且序列不可处理。
可能您将不得不完全放弃自动生成的身份方案,并通过查询先前的最大ID自己生成ID。注意,这将引入一个争用点,该争用点与许多并发插入相关。
可以使用其他手动生成ID的方案。可能值得做一些研究。