如何仅在满足特定条件时才自动增加组合键Id

本文关键字:增加 组合 Id 何仅 满足 特定条件 | 更新日期: 2023-09-27 18:06:43

我有一个代码优先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号和递增版本的新行。

我不知道如何获得Id自动增量只有当一个新的XYZ被创建,而不是一个新的版本。关于如何去获得Id自动增加只有当我想要一个新的XYZ,而不是一个不同的版本的建议?

版本控制的目的是跟踪不同的条目版本,以便可以回滚历史。我目前的一个问题是,这个项目已经进行了一半,由于糟糕的设计和/或缺乏知识(之前没有人做过代码优先的web开发),我不愿意改变数据库的组织方式。

有用的项目信息:Visual Studio 2013, SQL Server 2012, ASP。Net MVC 5 c# .

如何仅在满足特定条件时才自动增加组合键Id

不能使用IDENTITY列。您可以将SEQUENCE与手动T-SQL代码一起使用,但这很繁琐,并且序列是非事务的。

可能,您将不得不完全放弃自动生成的标识方案,并通过查询先前的最大ID来自己生成ID。注意,这将引入与许多并发插入相关的争用点。

还有其他手动生成ID的方案。也许值得做些研究