2025-11-09
LiteDB
00

目录

环境准备
项目实现
数据模型设计
数据访问层实现
业务逻辑层实现
3.4 使用示例
总结

本文将详细介绍如何使用C#和LiteDB实现一个设备运行状态追踪系统。该系统可以记录和监控设备的运行状态、故障信息以及维护记录等数据。LiteDB是一个轻量级的NoSQL数据库,完全基于.NET实现,非常适合小型应用程序和嵌入式系统。

环境准备

  • Visual Studio 2022
  • .NET 6.0 或更高版本
  • NuGet包:
    • LiteDB

image.png

项目实现

数据模型设计

首先,我们需要定义几个核心的数据模型:

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LiteDB; namespace App17.Models { // 设备信息模型 public class Device { [BsonId] // 设置主键 public int Id { get; set; } public string DeviceName { get; set; } public string SerialNumber { get; set; } public DateTime InstallationDate { get; set; } public string Location { get; set; } public bool IsActive { get; set; } } }
C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LiteDB; namespace App17.Models { // 设备状态记录模型 public class DeviceStatus { [BsonId] public ObjectId Id { get; set; } public int DeviceId { get; set; } public DateTime Timestamp { get; set; } public string Status { get; set; } // Running, Idle, Error, Maintenance public double Temperature { get; set; } public double PowerConsumption { get; set; } public string ErrorCode { get; set; } } }
C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LiteDB; namespace App17.Models { // 维护记录模型 public class MaintenanceRecord { [BsonId] public ObjectId Id { get; set; } public int DeviceId { get; set; } public DateTime MaintenanceDate { get; set; } public string MaintenanceType { get; set; } public string Description { get; set; } public string Technician { get; set; } public decimal Cost { get; set; } } }

数据访问层实现

创建一个数据访问类来处理与LiteDB的交互:

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using App17.Models; using LiteDB; namespace App17.Data { public class DeviceDataAccess : IDisposable { private readonly LiteDatabase _db; private readonly string _dbPath; public DeviceDataAccess(string dbPath = "DeviceTracking.db") { _dbPath = dbPath; _db = new LiteDatabase(_dbPath); } // 添加新设备 public int AddDevice(Device device) { var collection = _db.GetCollection<Device>("devices"); collection.Insert(device); return device.Id; } // 记录设备状态 public void RecordDeviceStatus(DeviceStatus status) { var collection = _db.GetCollection<DeviceStatus>("device_status"); collection.Insert(status); } // 添加维护记录 public void AddMaintenanceRecord(MaintenanceRecord record) { var collection = _db.GetCollection<MaintenanceRecord>("maintenance_records"); collection.Insert(record); } // 获取设备最新状态 public DeviceStatus GetLatestDeviceStatus(int deviceId) { var collection = _db.GetCollection<DeviceStatus>("device_status"); return collection.Find(x => x.DeviceId == deviceId) .OrderByDescending(x => x.Timestamp) .FirstOrDefault(); } // 获取设备维护历史 public IEnumerable<MaintenanceRecord> GetDeviceMaintenanceHistory(int deviceId) { var collection = _db.GetCollection<MaintenanceRecord>("maintenance_records"); return collection.Find(x => x.DeviceId == deviceId) .OrderByDescending(x => x.MaintenanceDate); } // 获取所有活跃设备 public IEnumerable<Device> GetActiveDevices() { var collection = _db.GetCollection<Device>("devices"); return collection.Find(x => x.IsActive); } // 更新设备信息 public bool UpdateDevice(Device device) { var collection = _db.GetCollection<Device>("devices"); return collection.Update(device); } public void Dispose() { _db?.Dispose(); } } }

业务逻辑层实现

创建一个设备管理服务类来处理业务逻辑:

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using App17.Data; using App17.Models; namespace App17.Services { public class DeviceManagementService { private readonly DeviceDataAccess _dataAccess; public DeviceManagementService(string dbPath = "DeviceTracking.db") { _dataAccess = new DeviceDataAccess(dbPath); } // 注册新设备 public int RegisterDevice(string deviceName, string serialNumber, string location) { var device = new Device { DeviceName = deviceName, SerialNumber = serialNumber, Location = location, InstallationDate = DateTime.Now, IsActive = true }; return _dataAccess.AddDevice(device); } // 更新设备状态 public void UpdateDeviceStatus(int deviceId, double temperature, double powerConsumption, string status, string errorCode = null) { var deviceStatus = new DeviceStatus { DeviceId = deviceId, Timestamp = DateTime.Now, Temperature = temperature, PowerConsumption = powerConsumption, Status = status, ErrorCode = errorCode }; _dataAccess.RecordDeviceStatus(deviceStatus); } // 记录维护工作 public void RecordMaintenance(int deviceId, string maintenanceType, string description, string technician, decimal cost) { var maintenance = new MaintenanceRecord { DeviceId = deviceId, MaintenanceDate = DateTime.Now, MaintenanceType = maintenanceType, Description = description, Technician = technician, Cost = cost }; _dataAccess.AddMaintenanceRecord(maintenance); } // 获取设备状态报告 public DeviceStatusReport GetDeviceReport(int deviceId) { var device = _dataAccess.GetActiveDevices().FirstOrDefault(d => d.Id == deviceId); if (device == null) return null; var latestStatus = _dataAccess.GetLatestDeviceStatus(deviceId); var maintenanceHistory = _dataAccess.GetDeviceMaintenanceHistory(deviceId).Take(5); return new DeviceStatusReport { Device = device, CurrentStatus = latestStatus, RecentMaintenance = maintenanceHistory.ToList() }; } } // 设备状态报告类 public class DeviceStatusReport { public Device Device { get; set; } public DeviceStatus CurrentStatus { get; set; } public List<MaintenanceRecord> RecentMaintenance { get; set; } } }

3.4 使用示例

下面是一个完整的使用示例:

C#
using DeviceStatusTracking.Services; class Program { static void Main(string[] args) { // 创建设备管理服务实例 var deviceService = new DeviceManagementService(); try { // 注册新设备 int deviceId = deviceService.RegisterDevice( deviceName: "生产线机器人-A1", serialNumber: "ROB-2024-001", location: "生产车间1号" ); Console.WriteLine($"设备注册成功,ID: {deviceId}"); // 模拟设备状态更新 deviceService.UpdateDeviceStatus( deviceId: deviceId, temperature: 45.5, powerConsumption: 2.8, status: "Running" ); // 模拟记录维护工作 deviceService.RecordMaintenance( deviceId: deviceId, maintenanceType: "定期保养", description: "更换润滑油,检查传动部件", technician: "张工", cost: 500.00M ); // 获取设备状态报告 var report = deviceService.GetDeviceReport(deviceId); // 打印报告 if (report != null) { Console.WriteLine("\n设备状态报告:"); Console.WriteLine($"设备名称: {report.Device.DeviceName}"); Console.WriteLine($"当前状态: {report.CurrentStatus.Status}"); Console.WriteLine($"温度: {report.CurrentStatus.Temperature}°C"); Console.WriteLine($"功耗: {report.CurrentStatus.PowerConsumption}kW"); Console.WriteLine("\n最近维护记录:"); foreach (var maintenance in report.RecentMaintenance) { Console.WriteLine($"日期: {maintenance.MaintenanceDate:yyyy-MM-dd}"); Console.WriteLine($"类型: {maintenance.MaintenanceType}"); Console.WriteLine($"描述: {maintenance.Description}"); Console.WriteLine($"技术员: {maintenance.Technician}"); Console.WriteLine($"费用: ¥{maintenance.Cost}"); Console.WriteLine(); } } } catch (Exception ex) { Console.WriteLine($"发生错误: {ex.Message}"); } } }

image.png

总结

本文介绍的设备运行状态追踪系统使用LiteDB实现了一个完整的设备管理解决方案。系统具有良好的可扩展性和维护性,适合小型工厂或实验室使用。通过合理的架构设计和数据模型,系统可以方便地进行功能扩展和定制化开发。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!