Files
DMS/DMS.Infrastructure/Repositories/RepositoryManager.cs

155 lines
5.1 KiB
C#
Raw Normal View History

2025-07-21 22:02:42 +08:00
using AutoMapper;
2025-07-21 18:49:49 +08:00
using DMS.Core.Interfaces;
using DMS.Core.Interfaces.Repositories;
using DMS.Core.Interfaces.Repositories.Triggers; // 引入新的接口
2025-07-21 18:49:49 +08:00
using DMS.Infrastructure.Data;
using DMS.Infrastructure.Entities;
2025-07-21 18:49:49 +08:00
using SqlSugar;
using System.Collections.Generic;
using System.Threading.Tasks;
2025-07-21 18:49:49 +08:00
namespace DMS.Infrastructure.Repositories;
2025-07-24 19:58:34 +08:00
/// <summary>
/// 仓储管理器实现类,负责管理所有具体的仓储实例,并提供事务管理功能。
/// 实现 <see cref="IRepositoryManager"/> 接口。
/// </summary>
2025-07-21 18:49:49 +08:00
public class RepositoryManager : IRepositoryManager
{
private readonly SqlSugarDbContext _dbContext;
private readonly SqlSugarClient _db;
2025-07-21 18:49:49 +08:00
2025-07-24 19:58:34 +08:00
/// <summary>
/// 构造函数,注入所有仓储实例。
2025-07-24 19:58:34 +08:00
/// </summary>
/// <param name="initializeRepository">初始化仓储实例。</param>
/// <param name="devices">设备仓储实例。</param>
/// <param name="variableTables">变量表仓储实例。</param>
/// <param name="variables">变量仓储实例。</param>
/// <param name="mqttServers">MQTT服务器仓储实例。</param>
/// <param name="mqttAliases">变量MQTT别名仓储实例。</param>
/// <param name="menus">菜单仓储实例。</param>
/// <param name="variableHistories">变量历史仓储实例。</param>
/// <param name="users">用户仓储实例。</param>
2025-09-07 19:01:58 +08:00
/// <param name="nlogs">Nlog日志仓储实例。</param>
/// <param name="triggers">触发器仓储实例。</param>
/// <param name="triggerVariables">触发器与变量关联仓储实例。</param>
public RepositoryManager( SqlSugarDbContext dbContext,
IInitializeRepository initializeRepository,
IDeviceRepository devices,
IVariableTableRepository variableTables,
IVariableRepository variables,
IMqttServerRepository mqttServers,
IMqttAliasRepository mqttAliases,
IMenuRepository menus,
IVariableHistoryRepository variableHistories,
2025-09-07 19:01:58 +08:00
IUserRepository users,
INlogRepository nlogs,
ITriggerRepository triggers,
ITriggerVariableRepository triggerVariables) // 新增参数
2025-07-21 18:49:49 +08:00
{
_dbContext = dbContext;
InitializeRepository = initializeRepository;
Devices = devices;
VariableTables = variableTables;
Variables = variables;
MqttServers = mqttServers;
MqttAliases = mqttAliases;
Menus = menus;
VariableHistories = variableHistories;
Users = users;
2025-09-07 19:01:58 +08:00
Nlogs = nlogs;
Triggers = triggers; // 赋值
TriggerVariables = triggerVariables; // 赋值
_db = dbContext.GetInstance();
2025-07-21 18:49:49 +08:00
}
2025-07-24 19:58:34 +08:00
/// <summary>
/// 释放数据库连接资源。
/// </summary>
2025-07-21 18:49:49 +08:00
public void Dispose()
{
_db?.Close();
2025-07-21 18:49:49 +08:00
}
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取设备仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IDeviceRepository Devices { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取变量表仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IVariableTableRepository VariableTables { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取变量仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IVariableRepository Variables { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取MQTT服务器仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IMqttServerRepository MqttServers { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取变量MQTT别名仓储实例。
/// </summary>
public IMqttAliasRepository MqttAliases { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取菜单仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IMenuRepository Menus { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取变量历史仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IVariableHistoryRepository VariableHistories { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 获取用户仓储实例。
/// </summary>
2025-07-21 18:49:49 +08:00
public IUserRepository Users { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
2025-09-07 19:01:58 +08:00
/// 获取Nlog日志仓储实例。
/// </summary>
public INlogRepository Nlogs { get; set; }
/// <summary>
/// 获取触发器仓储实例。
/// </summary>
public ITriggerRepository Triggers { get; set; }
/// <summary>
/// 获取触发器与变量关联仓储实例。
/// </summary>
public ITriggerVariableRepository TriggerVariables { get; set; }
/// <summary>
2025-07-24 19:58:34 +08:00
/// 获取初始化仓储实例。
/// </summary>
public IInitializeRepository InitializeRepository { get; set; }
2025-07-24 19:58:34 +08:00
/// <summary>
/// 异步开始数据库事务。
/// </summary>
/// <returns>表示异步操作的任务。</returns>
public async Task BeginTranAsync()
{
if (_db != null)
await _db.BeginTranAsync();
}
2025-07-21 18:49:49 +08:00
2025-07-24 19:58:34 +08:00
/// <summary>
/// 异步提交数据库事务。
/// </summary>
/// <returns>表示异步操作的任务。</returns>
public async Task CommitAsync()
{
if (_db != null)
await _db.CommitTranAsync();
}
2025-07-21 18:49:49 +08:00
2025-07-24 19:58:34 +08:00
/// <summary>
/// 异步回滚数据库事务。
/// </summary>
/// <returns>表示异步操作的任务。</returns>
public async Task RollbackAsync()
{
if (_db != null)
await _db.RollbackTranAsync();
}
2025-07-21 18:49:49 +08:00
}