diff --git a/Data/Repositories/VarDataRepository.cs b/Data/Repositories/VarDataRepository.cs index 174da0b..911c4d1 100644 --- a/Data/Repositories/VarDataRepository.cs +++ b/Data/Repositories/VarDataRepository.cs @@ -264,7 +264,7 @@ public class VarDataRepository } /// - /// 根据ID删除VariableData + /// 删除VariableData /// /// 主键ID /// @@ -282,4 +282,43 @@ public class VarDataRepository NlogHelper.Info($"删除VariableData: '{variableDatas.Count()}'个 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } + + /// + /// 为变量添加MQTT服务器关联。 + /// + /// 要添加MQTT服务器的变量数据列表。 + /// 要关联的MQTT服务器。 + /// 成功添加关联的数量。 + public async Task AddMqttToVariablesAsync(IEnumerable variableDatas, Mqtt mqtt) + { + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + int addedCount = 0; + + using (var db = DbContext.GetInstance()) + { + foreach (var variableData in variableDatas) + { + // 检查是否已存在该关联 + var existingAssociation = await db.Queryable() + .Where(x => x.VariableDataId == variableData.Id && x.MqttId == mqtt.Id) + .FirstAsync(); + + if (existingAssociation == null) + { + // 如果不存在,则添加新的关联 + await db.Insertable(new DbVariableDataMqtt + { + VariableDataId = variableData.Id, + MqttId = mqtt.Id + }).ExecuteCommandAsync(); + addedCount++; + } + } + } + + stopwatch.Stop(); + NlogHelper.Info($"为 {variableDatas.Count()} 个变量添加MQTT服务器 '{mqtt.Name}' 关联,成功添加 {addedCount} 个,耗时:{stopwatch.ElapsedMilliseconds}ms"); + return addedCount; + } } \ No newline at end of file diff --git a/ViewModels/VariableTableViewModel.cs b/ViewModels/VariableTableViewModel.cs index 608f5eb..2b2bf5a 100644 --- a/ViewModels/VariableTableViewModel.cs +++ b/ViewModels/VariableTableViewModel.cs @@ -774,27 +774,53 @@ partial class VariableTableViewModel : ViewModelBase return; // 用户取消选择 } - // 遍历所有选定的变量,并为其添加选定的MQTT服务器 - foreach (VariableData variable in validVariables) + // 调用新的仓库方法来添加MQTT服务器关联 + var addedCount = await _varDataRepository.AddMqttToVariablesAsync(validVariables, selectedMqtt); + + if (addedCount > 0) { - // 如果变量的Mqtts集合为空,则初始化它 - if (variable.Mqtts == null) + //跟新已经加载的变量的Mqtt服务器 + foreach (var variable in validVariables) { - variable.Mqtts = new List(); + if (variable.Mqtts==null) + { + variable.Mqtts=new List(); + } + // 判断不存在再添加 + + var ids = variable.Mqtts.Select(m => m.Id) + .ToList(); + if (!ids.Contains(selectedMqtt.Id)) + { + variable.Mqtts.Add(selectedMqtt); + } + + } + + //将变量添加到Mqtt服务器的变量表中 + if (selectedMqtt.VariableDatas==null) + { + + selectedMqtt.VariableDatas=new List(); } - // 避免重复添加相同的MQTT服务器 - if (!variable.Mqtts.Any(m => m.Id == selectedMqtt.Id)) + foreach (var variable in validVariables) { - variable.Mqtts.Add(selectedMqtt); - // variable.IsModified = true; // 标记为已修改 (如果需要UI立即反映,但此处批量更新数据库,所以可以省略) + var ids = selectedMqtt.VariableDatas.Select(v => v.Id) + .ToList(); + if (!ids.Contains(variable.Id)) + { + variable.Mqtts.Add(selectedMqtt); + } } + // 刷新界面以反映更改 + await RefreshDataView(); + NotificationHelper.ShowSuccess($"已成功为 {addedCount} 个变量添加MQTT服务器: {selectedMqtt.Name}"); + } + else + { + NotificationHelper.ShowInfo($"没有新的变量关联到MQTT服务器: {selectedMqtt.Name},可能已存在。"); } - - // 批量更新数据库中的变量数据 - await _varDataRepository.UpdateAsync(validVariables.ToList()); - // 显示成功通知 - NotificationHelper.ShowSuccess($"已成功为 {validVariables.Count} 个变量添加MQTT服务器: {selectedMqtt.Name}"); } catch (Exception ex) {