c# - 用户应该能够重置自动增量(身份)列:可能的解决方案
问题描述
在应用程序中应该有一个功能供用户在需要时重置 orderNumber。我们正在为 db、.NET Core、Entity Framework 等使用 SQL Server。我想知道实现这一目标的最优雅的方法是什么?考虑过制作 orderNumber int, identity(1,1)
,我已经搜索过DBCC CHECKIDENT('tableName', RESEED, 0)
,但后者引入了一些权限问题(用户必须拥有架构,是系统管理员等)。编辑: orderNumber 不是主键,重复值不是问题。我们应该让用户(可能每年一次)将他们的订单编号重新从 1 开始。有什么建议吗?
解决方案
似乎 orderNumber 是一个业务层问题 - 因此我推荐一个非 SQL 解决方案。您需要 C# 代码生成存储在“订单”实体中的数字。我不会使用 IDENTITY() 来实现/解决这个问题。
客户不会重置数据库中的任何内容,您的代码将执行此操作。您需要在业务层中提供“获取号码”服务,并在 UI 中设置一个位置来重置它(假定为每个客户)。
Sql Server 有序列。我对使用它的唯一关注是按客户进行分区(假设的要求)。你会有多个客户吗?如果是这样,您可能无法拥有一个数字生成器。因此,为什么我建议使用 C# 实现(当然,您需要在分发数字时保存状态)。
推荐阅读
- c++ - 为什么减法时得到0而不是负数?
- c# - 将 ExpandableObjectConverter 属性分配给属性级别或类级别有什么区别?
- swift - 使用不需要的对象初始化结构对象
- c# - DotNet Core Api - 特定端点的不同身份验证
- mysql - 删除一堆记录后 MySQL 查询仍然很慢
- salesforce - 如何使用 JSON API 在 SalesForce 中创建经典电子邮件模板文件夹
- function - 正确地将参数传递给函数
- javascript - 将属性应用于整个类
- java - 删除 addTextChangedListener() 当 EditText 值以编程方式而不是手动更改时
- r - R:如果有连续的列相等,如何只保留一个并分配一个新的列名