我有一个代码优先的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的方案。可能值得做一些研究。

09-30 12:53
查看更多