public static void Update <T>( this AddForeignModelManager <T> manager, long entryId, List <long> currentEntries, List <long> selectedEntries) where T : class, IEntity, new() { if (UnorderedListEqualHelper.UnorderedEqual(currentEntries, selectedEntries)) { return; } currentEntries.Except(selectedEntries).ToList().ForEach(x => manager.Remove(entryId, x)); selectedEntries.Except(currentEntries).ToList().ForEach(x => manager.Add(entryId, x)); }
public void EditRecord(IFormCollection form) { long tableId = Convert.ToInt64(form["TableId"].ToString()); long entryId = Convert.ToInt64(form["Id"].ToString()); var parameters = new List <ArrayList>(); var columns = _columnManager.List(x => x.TableId == tableId); foreach (var item in columns) { if (!(item.ColumnType == ColumnType.Image || item.ColumnType == ColumnType.Bool) && !form.ContainsKey(item.Name)) { continue; } var arrayList = ProcessColumn(item, form); if (arrayList == null) { continue; } parameters.Add(arrayList); } var table = _tableManager.GetById(tableId); _sqlProvider.Update(table.Name, parameters, new List <ArrayList>() { new ArrayList() { "Id", entryId } }); foreach (var item in columns.Where(x => x.ColumnType == ColumnType.MultipleSelectList)) { var currentEntries = new List <long>(); switch (item.ColumnType) { case ColumnType.MultipleSelectList: foreach (DataRow row in _sqlProvider .List($"SELECT * FROM {table.Name}{item.TargetTable} WHERE {table.Name}Id={entryId}").Rows) { currentEntries.Add(Convert.ToInt64(row[item.TargetTable + "Id"])); } var selectedEntriesStr = form[item.Name].ToString(); var selectedEntries = string.IsNullOrEmpty(selectedEntriesStr) ? new List <long>() : selectedEntriesStr.Split(',').Select(x => Convert.ToInt64(x)) .ToList(); if (UnorderedListEqualHelper.UnorderedEqual(currentEntries, selectedEntries)) { continue; } currentEntries.Except(selectedEntries).ToList().ForEach(x => _sqlProvider.Delete(table.Name + item.TargetTable, new List <ArrayList>() { new ArrayList() { table.Name + "Id", entryId }, new ArrayList() { item.TargetTable + "Id", x }, }) ); selectedEntries.Except(currentEntries).ToList().ForEach(x => _sqlProvider.Save(table.Name + item.TargetTable, new List <ArrayList>() { new ArrayList() { table.Name + "Id", entryId }, new ArrayList() { item.TargetTable + "Id", x }, }) ); break; } } }