diff --git a/DMS.Application/DTOs/VariableMqttAliasDto.cs b/DMS.Application/DTOs/VariableMqttAliasDto.cs
index a5829d0..0627f2b 100644
--- a/DMS.Application/DTOs/VariableMqttAliasDto.cs
+++ b/DMS.Application/DTOs/VariableMqttAliasDto.cs
@@ -1,3 +1,5 @@
+using DMS.Core.Models;
+
namespace DMS.Application.DTOs;
///
@@ -10,4 +12,14 @@ public class VariableMqttAliasDto
public int MqttServerId { get; set; }
public string MqttServerName { get; set; } // 用于UI显示关联的服务器名称
public string Alias { get; set; }
+
+ ///
+ /// 关联的变量对象。
+ ///
+ public Variable Variable { get; set; }
+
+ ///
+ /// 关联的MQTT服务器对象。
+ ///
+ public MqttServer MqttServer { get; set; }
}
\ No newline at end of file
diff --git a/DMS.Application/Profiles/MappingProfile.cs b/DMS.Application/Profiles/MappingProfile.cs
index f1b133e..f14f236 100644
--- a/DMS.Application/Profiles/MappingProfile.cs
+++ b/DMS.Application/Profiles/MappingProfile.cs
@@ -36,7 +36,7 @@ public class MappingProfile : Profile
// VariableMqttAlias 映射
CreateMap()
- .ForMember(dest => dest.MqttServerName, opt => opt.Ignore())
+ .ForMember(dest => dest.MqttServerName, opt => opt.MapFrom(src => src.MqttServer.ServerName))
.ReverseMap();
// VariableHistory 映射
diff --git a/DMS.Application/Services/MqttAliasAppService.cs b/DMS.Application/Services/MqttAliasAppService.cs
index 583d529..78c77a2 100644
--- a/DMS.Application/Services/MqttAliasAppService.cs
+++ b/DMS.Application/Services/MqttAliasAppService.cs
@@ -57,11 +57,17 @@ public class MqttAliasAppService : IMqttAliasAppService
else
{
// 如果不存在,则创建新的关联
+ // 获取关联的Variable和MqttServer实体
+ var variable = await _repoManager.Variables.GetByIdAsync(variableId);
+ var mqttServer = await _repoManager.MqttServers.GetByIdAsync(mqttServerId);
+
var newAlias = new VariableMqttAlias
{
VariableId = variableId,
MqttServerId = mqttServerId,
- Alias = alias
+ Alias = alias,
+ Variable = variable,
+ MqttServer = mqttServer
};
await _repoManager.VariableMqttAliases.AddAsync(newAlias);
}
diff --git a/DMS.Infrastructure/Profiles/MappingProfile.cs b/DMS.Infrastructure/Profiles/MappingProfile.cs
index f135cbe..c983c12 100644
--- a/DMS.Infrastructure/Profiles/MappingProfile.cs
+++ b/DMS.Infrastructure/Profiles/MappingProfile.cs
@@ -30,8 +30,6 @@ public class MappingProfile : Profile
.ForMember(dest => dest.VariableAliases, opt => opt.Ignore())
.ReverseMap();
CreateMap()
- .ForMember(dest => dest.Variable, opt => opt.Ignore())
- .ForMember(dest => dest.MqttServer, opt => opt.Ignore())
.ReverseMap();
CreateMap().ReverseMap();
diff --git a/DMS.Infrastructure/Repositories/VariableMqttAliasRepository.cs b/DMS.Infrastructure/Repositories/VariableMqttAliasRepository.cs
index 8248869..2b2afd5 100644
--- a/DMS.Infrastructure/Repositories/VariableMqttAliasRepository.cs
+++ b/DMS.Infrastructure/Repositories/VariableMqttAliasRepository.cs
@@ -116,10 +116,43 @@ public class VariableMqttAliasRepository : BaseRepository,
///
public async Task> GetAliasesForVariableAsync(int variableId)
{
+ // 查询别名关联,并包含关联的Variable和MqttServer信息
var dbList = await Db.Queryable()
.Where(x => x.VariableId == variableId)
.ToListAsync();
- return _mapper.Map>(dbList);
+
+ // 手动加载关联的Variable和MqttServer实体
+ var variableIds = dbList.Select(x => x.VariableId).Distinct().ToList();
+ var mqttServerIds = dbList.Select(x => x.MqttServerId).Distinct().ToList();
+
+ var variables = await Db.Queryable()
+ .In(x => x.Id, variableIds)
+ .ToListAsync();
+
+ var mqttServers = await Db.Queryable()
+ .In(x => x.Id, mqttServerIds)
+ .ToListAsync();
+
+ // 将关联实体映射到领域模型
+ var variableDict = variables.ToDictionary(v => v.Id, v => _mapper.Map(v));
+ var mqttServerDict = mqttServers.ToDictionary(m => m.Id, m => _mapper.Map(m));
+
+ // 映射主实体并设置导航属性
+ var result = _mapper.Map>(dbList);
+ foreach (var alias in result)
+ {
+ if (variableDict.TryGetValue(alias.VariableId, out var variable))
+ {
+ alias.Variable = variable;
+ }
+
+ if (mqttServerDict.TryGetValue(alias.MqttServerId, out var mqttServer))
+ {
+ alias.MqttServer = mqttServer;
+ }
+ }
+
+ return result;
}
///
@@ -130,6 +163,24 @@ public class VariableMqttAliasRepository : BaseRepository,
var dbAlias = await Db.Queryable()
.Where(x => x.VariableId == variableId && x.MqttServerId == mqttServerId)
.FirstAsync();
- return _mapper.Map(dbAlias);
+
+ if (dbAlias == null)
+ return null;
+
+ // 手动加载关联的Variable和MqttServer实体
+ var variable = await Db.Queryable()
+ .Where(x => x.Id == variableId)
+ .FirstAsync();
+
+ var mqttServer = await Db.Queryable()
+ .Where(x => x.Id == mqttServerId)
+ .FirstAsync();
+
+ // 映射主实体并设置导航属性
+ var result = _mapper.Map(dbAlias);
+ result.Variable = _mapper.Map(variable);
+ result.MqttServer = _mapper.Map(mqttServer);
+
+ return result;
}
}
\ No newline at end of file
diff --git a/DMS.WPF/ViewModels/Dialogs/MqttAliasBatchEditDialogViewModel.cs b/DMS.WPF/ViewModels/Dialogs/MqttAliasBatchEditDialogViewModel.cs
index 35f9ea1..125209c 100644
--- a/DMS.WPF/ViewModels/Dialogs/MqttAliasBatchEditDialogViewModel.cs
+++ b/DMS.WPF/ViewModels/Dialogs/MqttAliasBatchEditDialogViewModel.cs
@@ -47,6 +47,7 @@ namespace DMS.WPF.ViewModels.Dialogs
MqttServerId = SelectedMqttServer.Id,
MqttServerName = SelectedMqttServer.ServerName,
MqttServer = SelectedMqttServer,
+ Variable = variable,
Alias = existingAlias?.Alias ?? GenerateDefaultAlias(variable)
};
@@ -60,7 +61,7 @@ namespace DMS.WPF.ViewModels.Dialogs
private string GenerateDefaultAlias(VariableItemViewModel variable)
{
// 可以根据需要自定义默认别名生成逻辑
- return $"{variable.Name}_{Guid.NewGuid().ToString("N")[..8]}";
+ return $"{variable.Name}";
}
///
@@ -93,7 +94,7 @@ namespace DMS.WPF.ViewModels.Dialogs
foreach (var alias in VariableMqttAliases)
{
- alias.Alias = $"{prefix}_{alias.VariableId}";
+ alias.Alias = $"{prefix}_{alias.Variable.Name}";
}
}
}
diff --git a/DMS.WPF/ViewModels/Items/VariableMqttAliasItemViewModel.cs b/DMS.WPF/ViewModels/Items/VariableMqttAliasItemViewModel.cs
index 5d612ad..7216a6e 100644
--- a/DMS.WPF/ViewModels/Items/VariableMqttAliasItemViewModel.cs
+++ b/DMS.WPF/ViewModels/Items/VariableMqttAliasItemViewModel.cs
@@ -21,4 +21,7 @@ public partial class VariableMqttAliasItemViewModel : ObservableObject
[ObservableProperty]
private MqttServerItemViewModel _mqttServer;
+
+ [ObservableProperty]
+ private VariableItemViewModel _variable;
}
diff --git a/DMS.WPF/ViewModels/VariableTableViewModel.cs b/DMS.WPF/ViewModels/VariableTableViewModel.cs
index 5775c28..d11979f 100644
--- a/DMS.WPF/ViewModels/VariableTableViewModel.cs
+++ b/DMS.WPF/ViewModels/VariableTableViewModel.cs
@@ -626,7 +626,8 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
VariableId = originalVariable.Id,
MqttServerId = selectedMqtt.Id,
Alias = editedVariableMqtt.Alias,
- MqttServer = selectedMqtt
+ MqttServer = selectedMqtt,
+ Variable = originalVariable
};
// originalVariable.MqttAliases.Add(variableMqtt);
}
diff --git a/DMS.WPF/Views/Dialogs/MqttAliasBatchEditDialog.xaml b/DMS.WPF/Views/Dialogs/MqttAliasBatchEditDialog.xaml
index e38d583..1ab2a4b 100644
--- a/DMS.WPF/Views/Dialogs/MqttAliasBatchEditDialog.xaml
+++ b/DMS.WPF/Views/Dialogs/MqttAliasBatchEditDialog.xaml
@@ -33,6 +33,7 @@
@@ -47,7 +48,7 @@
MaxHeight="500">