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。