如何在实体框架中为DatabaseGeneratedOption身份生成顺序增量ID

问题描述 投票:0回答:1

我们正在使用实体框架代码优先模型,其类结构如下

 public class BaseSchema
{
    [Key]
    [ScaffoldColumn(false)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Display(Name = "Is Deleted")]
    public bool IsDeleted { get; set; }
}

public class School : BaseSchema
{
    [Required]
    [MaxLength(20)]
    public string Name { get; set; }
}

当我们将信息保存在学校表中时,它的ID字段未按顺序生成。 Ex最初以1,2,3,4,5,6,7,8,9,10顺序开始,然后突然创建了下一个id值1011,2011我们在学校里存钱如下

using (var context = new DataContext())
{
    School newschool = new School { Name = "UniqueSchoolName" };
    context.School.Add(newschool);
    context.SaveChanges();
}

您能否指导为什么不按顺序生成ID?谢谢!

c# entity-framework entity-framework-6 ef-code-first
1个回答
0
投票

您不应该在意差距。

出于性能原因,这是设计使然,SQL Server缓存了1,000个数字,而在SQL Server上重新启动时,缓存就消失了。

并且该行为的详细记录,请参见CREATE TABLE (Transact-SQL) IDENTITY (Property) =>注释:“服务器重启或其他故障后的连续值”

此外,当回滚插入时,不会重置标识值

© www.soinside.com 2019 - 2024. All rights reserved.