C# 如何在实体框架中为DatabaseGenerateOption标识生成顺序增量id

C# 如何在实体框架中为DatabaseGenerateOption标识生成顺序增量id,c#,entity-framework,entity-framework-6,ef-code-first,C#,Entity Framework,Entity Framework 6,Ef Code First,我们使用实体框架代码优先模型,其类结构如下 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 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; }
}
当我们将信息保存在school表中时,它的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吗?
谢谢大家!

你不应该在意差距

这是出于性能考虑而设计的,SQL Server缓存1000个数字,在SQL Server重新启动时,缓存消失

这种行为有很好的文档记录,请参见=>备注:“服务器重新启动或其他故障后的连续值”


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

理解,但是如何处理大数据呢?如果任何主键超过int范围,我们需要设置为long。如何填补这一空白?如果数据集较大,int有限制。如果达到限制,则插入失败。您应该使用BigInt或Unique Identifier-GUID。