首页 > 解决方案 > 用户应该能够重置自动增量(身份)列:可能的解决方案

问题描述

在应用程序中应该有一个功能供用户在需要时重置 orderNumber。我们正在为 db、.NET Core、Entity Framework 等使用 SQL Server。我想知道实现这一目标的最优雅的方法是什么?考虑过制作 orderNumber int, identity(1,1),我已经搜索过DBCC CHECKIDENT('tableName', RESEED, 0),但后者引入了一些权限问题(用户必须拥有架构,是系统管理员等)。编辑: orderNumber 不是主键,重复值不是问题。我们应该让用户(可能每年一次)将他们的订单编号重新从 1 开始。有什么建议吗?

标签: c#sql-serverasp.net-coreentity-framework-core

解决方案


似乎 orderNumber 是一个业务层问题 - 因此我推荐一个非 SQL 解决方案。您需要 C# 代码生成存储在“订单”实体中的数字。我不会使用 IDENTITY() 来实现/解决这个问题。

客户不会重置数据库中的任何内容,您的代码将执行此操作。您需要在业务层中提供“获取号码”服务,并在 UI 中设置一个位置来重置它(假定为每个客户)。

Sql Server 有序列。我对使用它的唯一关注是按客户进行分区(假设的要求)。你会有多个客户吗?如果是这样,您可能无法拥有一个数字生成器。因此,为什么我建议使用 C# 实现(当然,您需要在分发数字时保存状态)。


推荐阅读