ошибка при удалении postgre
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 27.02.24 08:32
Оценка:
The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
public async Task DeleteUser(User user)
{
            if (user.Role == Roles.Bank)
            {
                var bank = await _context.Banks.AsNoTracking().FirstOrDefaultAsync(x => x.CuratorId == user.Id);
                if (bank != null)
                {
                    _context.Entry(bank).State = EntityState.Deleted;
                    _context.Banks.Remove(bank);
                }
            }

            _context.Entry(user).State = EntityState.Deleted;
            _context.Users.Remove(user);
            await _context.SaveChangesAsync();
}


работало вроде с ms sql но с posdtgres не работает

помогите пожалуйста, вообще без понятия что делать, я так понял можно закоментить удаление юзера и падает на удалении банка
Re: ошибка при удалении postgre
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 27.02.24 08:36
Оценка: 4 (1)
я так понял что ошибка из-за того что Identity ALWAYS добавил на столбец после переноса данных и сейчас по 2 записи с Id 3 и 4 и не может удалить, должнго было быть ID 51 и 52, но нумерация не продолжилась
Re[2]: ошибка при удалении postgre
От: yenik  
Дата: 28.03.24 04:34
Оценка:
Здравствуйте, dsalodki, Вы писали:

D>я так понял что ошибка из-за того что Identity ALWAYS добавил на столбец после переноса данных и сейчас по 2 записи с Id 3 и 4


Id — не первичный ключ, раз значения дублируются? Надо сделать превичным ключом.

D>и не может удалить, должнго было быть ID 51 и 52, но нумерация не продолжилась


После переноса данных надо переставить IDENTITY. Как-то так:

SELECT setval(pg_get_serial_sequence('bank', 'id'), coalesce(MAX(id), 1)) FROM bank;
https://dba.stackexchange.com/questions/292617/restarting-identity-columns-in-postgresql


PS Удаление банка конечно проще можно написать, без AsNoTracking.

var bank = await _context.Banks.FirstOrDefaultAsync(x => x.CuratorId == user.Id);
if (bank != null)
{
  _context.Banks.Remove(bank);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.