ASP.NET项目中如何生成ART-XXXX/YYYY格式的动态产品编码
修改ASP.NET产品编码生成逻辑为ART-XXXX/YYYY格式
你的需求是将现有001/2023格式的产品编码调整为ART-001/2023,只需对编码生成逻辑做核心修改,同时补充异常处理避免格式错误导致的问题:
修改后的编码生成逻辑
var currentYear = DateTime.Now.Year; // 初始编码改为ART-前缀格式 var productCode = $"ART-001/{currentYear}"; var latestProduct = await context.products.OrderByDescending(f => f.Id) .FirstOrDefaultAsync(); if (latestProduct != null && latestProduct.ProductCode.Contains(currentYear.ToString())) { try { // 拆分编码前缀部分,移除ART-后提取数字 var codePrefix = latestProduct.ProductCode.Split("/")[0]; var numberPart = codePrefix.Replace("ART-", string.Empty); var currentProduct = int.Parse(numberPart) + 1; // 拼接符合新格式的编码 productCode = $"ART-{currentProduct:0000}/{currentYear}"; } catch (FormatException ex) { // 处理编码格式异常,可根据业务需求调整逻辑 throw new InvalidOperationException("现有产品编码格式不正确,无法生成新编码", ex); } }
关键修改说明
- 初始编码调整:直接将默认编码从
001/{currentYear}改为ART-001/{currentYear},确保第一个产品的编码符合新格式 - 编码解析逻辑优化:
- 先通过
Split("/")获取编码的前缀部分(如ART-0001) - 移除
ART-前缀提取纯数字,转成整数后自增 - 重新拼接回
ART-前缀、补零数字和年份
- 先通过
- 异常处理:增加
try-catch捕获格式转换异常,避免数据库中存在不符合格式的编码导致程序崩溃
额外优化建议
- 排序逻辑优化:如果Id递增顺序和产品编码生成顺序不完全一致,建议改为按
ProductCode降序排序,确保取到最新的有效编码 - 封装独立方法:将编码生成逻辑封装为单独的服务方法(如
GenerateNextProductCodeAsync()),便于复用和单元测试 - 数据验证:在
Article类的ProductCode属性上添加注解,确保存入数据库的编码格式合规:[RegularExpression(@"^ART-\d{4}/\d{4}$", ErrorMessage = "产品编码格式必须为ART-XXXX/YYYY")] public string ProductCode { get; set; }
内容的提问来源于stack exchange,提问作者pro
相关产品推荐
相关产品推荐

