EF Core ЖЕ ТАБЛИЦА ДВУХ ДЕЙСТВИЙ (Удалить элемент + обновить оставшиеся) - PullRequest
1 голос
/ 24 апреля 2020

У меня странная ситуация.

У меня есть список, из которого мне нужно удалить элемент из БД, а затем все остальные, которые мне нужно просто увеличить и обновить.

Я использую .AsNoTracking () для фильтрации списка, но я не могу выполнить описанные выше действия. Говорит мне, что "" Свойство ListNumber "для типа объекта" LIST "является частью ключа и поэтому не может быть изменено или помечено как измененное. Чтобы изменить принципала существующего объекта с идентифицирующим внешним ключом, сначала удалите зависимого и вызовите «SaveChanges», а затем свяжите зависимого с новым принципалом. "

Я также пытался создать 1 метод для удаления и 1 для обновления оставшихся элементов и вызова их из контроллера (первый - удаление, второй - обновление), но тот же результат.

Любой может помочь мне, потому что я застрял, я бы Я высоко ценю четкий пример или подход к тому, как я могу справиться с вышеуказанной ситуацией.

Заранее спасибо.

Так я называю методы из контроллера

await _repo.RemoveFromList("1234", "1");
await _repo.ResetList("1234");

Ниже приведены методы, которые я использую, удалить один работает, но когда я использую список сброса, я получил исключение

public async Task RemoveFromList(string listNumber, string listItem)
        {
            try
            {
                var entity = await _context.LIST.Where(x => x.ListNumber == listNumber && x.ListItem == listItem).FirstOrDefaultAsync();
                _context.LIST.Remove(entity);
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                throw;
            }
        }

public async Task ResetList(string listNumber)
        {
            try
            {
                var entities = await _context.LIST.AsQueryable().Where(x => ListNumber== listNumber).ToListAsync();
                var startFrom = 1;
                foreach (var en in entities)
                {
                    en.NewListNumber = startFrom.ToString().PadLeft(3, '0');
                    startFrom++;
                    _context.LIST.Update(en);
                }

                await _context.SaveChangesAsync();

            }
            catch (Exception ex)
            {
                throw;
            }
        }
...