C# 实体框架保存更改失败增量标识列

C# 实体框架保存更改失败增量标识列,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我对执行SaveChanges方法时实体框架的行为有疑问 我有一个实体有一个标识列,我刚刚意识到,如果我调用SaveChanges(用于新的插入),它失败了,那么我的数据库中的标识列就会增加 我以前的标识列值等于7,我正在调试代码,并且SaveChanges方法失败了5次,因为我没有插入所需的值,当它生效时,我注意到我的标识列值现在是13 这是正常的行为吗?当Entity Framework无法提交到my DB时,是否有办法避免增加标识列值 感谢您的帮助这是Sql的行为,而不是实体框架。如果不

我对执行
SaveChanges
方法时实体框架的行为有疑问

我有一个实体有一个标识列,我刚刚意识到,如果我调用
SaveChanges
(用于新的插入),它失败了,那么我的数据库中的标识列就会增加

我以前的标识列值等于7,我正在调试代码,并且
SaveChanges
方法失败了5次,因为我没有插入所需的值,当它生效时,我注意到我的标识列值现在是13

这是正常的行为吗?当Entity Framework无法提交到my DB时,是否有办法避免增加标识列值


感谢您的帮助

这是Sql的行为,而不是实体框架。如果不想浪费标识,您应该查看Dbreseed命令并为您的表执行它。如果我是您,请检查此问题,这样我就不会麻烦了。只需对标识列使用Bigint数据类型

这与EF无关,当在具有标识的表上进行任何插入失败时,它仍然会递增,只需在sql management studio中尝试即可。你为什么在乎?好吧,很有趣。有没有办法避免这种行为或者是正常的?我不这么认为,这是一种设计特征。想象一个长事务启动,然后另一个事务启动,如果第二个事务必须等待第一个事务成功与否,以确定它应该使用什么身份,那将是糟糕的。正如我之前提到的,如果你的ID不是顺序的,你为什么会在意呢?@VAAA我希望你不会采取错误的方法,但这是一种非常脆弱的方法,而且它的设计很糟糕。比如说,你继续这样做,在某个时候,由于删除,你必须更新数字。所以上周的“第八对开本”现在变成了“第七对开本”。这不会让用户感到困惑吗?不要将行的标识与显示的行数混淆。如果ID为13,则确保用户可以看到13。如果要显示用户体验的序列号,可以使用。