当前位置: 首页 > news >正文

`SaveKeyDataAsync` 重构优化版本

✅SaveKeyDataAsync重构优化版本以下是针对StationRepository中SaveKeyDataAsync方法的完整重构包含生产级最佳实践。1. 重构后的StationRepository.cs重点方法// MaxWell.Repository/StationRepository.csusingMicrosoft.EntityFrameworkCore;usingMaxWell.Interface;usingMaxWell.Model;usingSystem;usingSystem.Threading.Tasks;namespaceMaxWell.Repository{publicclassStationRepository:IStationRepository{privatereadonlyIDbContextFactoryAppDbContext_dbContextFactory;publicStationRepository(IDbContextFactoryAppDbContextdbContextFactory){_dbContextFactorydbContextFactory??thrownewArgumentNullException(nameof(dbContextFactory));}/// summary/// 重构后的 SaveKeyDataAsync - 推荐最终版本/// /summarypublicasyncTaskSaveKeyDataAsync(HardwareDatadata){if(datanull)return;// 基础数据验证if(string.IsNullOrWhiteSpace(data.HardwareSN)string.IsNullOrWhiteSpace(data.Address)){return;}awaitusingvarcontextawait_dbContextFactory.CreateDbContextAsync();try{varlogEntitynewHardwareDataLog{StationIddata.StationId??Unknown,HardwareSNdata.HardwareSN,Addressdata.Address,Valuedata.Value?.ToString()??string.Empty,DataTypedata.SignalDataType??Unknown,Qualitydata.Quality??Good,Timestampdata.Timestamp.ToLocalTime(),CreatedAtDateTime.UtcNow,IsKeyDatadata.IsKeyData};context.HardwareDataLogs.Add(logEntity);// 性能优化批量插入时可使用 AddRangeawaitcontext.SaveChangesAsync();}catch(DbUpdateExceptiondbEx){// 处理数据库更新异常如唯一约束违反等// 可在此处记录日志或发送报警thrownewInvalidOperationException($保存硬件数据失败 [Station:{data.StationId}],dbEx);}catch(Exceptionex){thrownewInvalidOperationException($保存硬件数据时发生未知错误,ex);}}// ... 其他方法保持不变}}2. 推荐的实体模型HardwareDataLog请在MaxWell.Model或MaxWell.Repository.Entities中添加以下实体// MaxWell.Model/HardwareDataLog.csusingSystem;usingSystem.ComponentModel.DataAnnotations;usingSystem.ComponentModel.DataAnnotations.Schema;namespaceMaxWell.Model{[Table(HardwareDataLogs)]publicclassHardwareDataLog{[Key][DatabaseGenerated(DatabaseGeneratedOption.Identity)]publiclongId{get;set;}[Required][MaxLength(50)]publicstringStationId{get;set;}string.Empty;[MaxLength(100)]publicstringHardwareSN{get;set;}string.Empty;[MaxLength(100)]publicstringAddress{get;set;}string.Empty;publicstringValue{get;set;}string.Empty;[MaxLength(20)]publicstringDataType{get;set;}string.Empty;[MaxLength(20)]publicstringQuality{get;set;}Good;publicDateTimeTimestamp{get;set;}publicDateTimeCreatedAt{get;set;}publicboolIsKeyData{get;set;}// 可扩展字段publicstring?ExtraInfo{get;set;}}}3. 在AppDbContext中映射推荐publicclassAppDbContext:DbContext{publicDbSetHardwareDataLogHardwareDataLogs{get;set;}null!;protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){modelBuilder.EntityHardwareDataLog(entity{entity.HasIndex(enew{e.StationId,e.Timestamp});entity.HasIndex(ee.HardwareSN);entity.Property(ee.Value).HasMaxLength(500);});}}重构亮点异常处理区分数据库异常和普通异常数据验证防止保存无效数据时间处理统一使用本地时间或 UTC根据业务需求实体分离HardwareData是领域模型HardwareDataLog是持久化模型符合 DDD 思想可扩展性预留ExtraInfo字段性能使用await using确保资源释放 索引优化关注继续提供以下优化批量保存版本SaveKeyDataBatchAsync异步 限流版本高频数据场景使用ValueConverter自动转换复杂类型
http://www.zskr.cn/news/1316587.html

相关文章:

  • IDA逆向分析实战:破解函数限制、修复栈平衡与Switch识别
  • HC5503晨芯阳70mΩ,2.1A 5V USB 高侧限流负载开关
  • 手把手教你制作TRON风格发光卫衣:EL电线与缝纫的软硬件结合
  • BFloat16指令集与矩阵乘法优化技术详解
  • NotebookLM文档召回率骤降73%?(内部实验报告首次公开:BM25+SBERT混合排序实战框架)
  • 从逻辑实体到系统工程:深度解析软件危机的起源与软件工程的三大支柱
  • Floodlight 控制器安装
  • RK3568 以太网 PHY 移植没那么难:YT8521SC 接入全过程拆解
  • MPP500 多参数在线水质分析仪的产品优势是什么?该如何选型? - 仪表人小余
  • 动力学系统运动规划与步态优化技术解析
  • AI行业的“中年危机”:为什么说AI工程师也有35岁门槛
  • Visual Studio Code运行Keil5程序报错
  • fix-my-claw:自动化修复复杂开发环境的模块化脚本实践
  • 2026 电磁流量计产品参数全解析,功能特点与结构配置详解 - 陈工日常
  • 高效构建离线学习库:MoocDownloader一站式MOOC下载方案终极指南
  • 如何快速实现手机号码地理位置定位:开源工具全面指南
  • 管道式电磁流量计产品详情,适用介质与安装方式解析 - 陈工日常
  • SmartPerfetto 两周更新内容汇总
  • 2026山东铝单板制造TOP5!潍坊临朐等地厂家实力出众口碑佳 - 十大品牌榜
  • NotebookLM文献管理配置失败?3分钟诊断清单(含Chrome插件冲突、PDF元数据丢失、CSL样式崩溃应急方案)
  • 3分钟掌握RVC语音克隆:零基础打造你的专属AI语音助手
  • 超声波热量表 10 大名牌排行榜,买购权威榜单参考 - 陈工日常
  • 2026国内水线自动冲洗机TOP5!山东潍坊等地公司质量可靠口碑佳 - 十大品牌榜
  • 合肥本地黄金回收推荐(2026):连锁老店 + 上门回收优选 - 奢侈品回收测评
  • 告别示波器猜协议:用PulseView+RP2040逻辑分析仪高效解码I2C/SPI/UART
  • 自动同步总失败?NotebookLM本地缓存+云端快照双轨备份,手把手配置到上线仅需7分钟
  • 技能图谱:构建结构化知识体系,实现高效学习与成长
  • 【USB3.0协议探秘】实战篇·三种复位事件的触发机制与链路状态变迁
  • LKY Office Tools:一键自动化部署Office的终极解决方案
  • Windows远程桌面终极突破:RDP Wrapper创新性解锁多用户并发连接