Beispiel #1
0
 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;
                }
            }
        }