EF: оператор обновления, вставки или удаления магазина затронул неожиданное количество строк (0) - PullRequest
0 голосов
/ 12 октября 2019

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

Ошибка:

Оператор хранения, обновления или удаления затронул неожиданное количество строк ({0}). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновите записи ObjectStateManager.

И я предпринял несколько попыток, например:

  1. Проверено, что первичный ключ правильный;
  2. Там нет такогокод типа [Bind(Exclude)];
  3. Я получил эти данные из базы данных, прежде чем пометил их как измененные;

И вот мой код:

var expProfitDtos = value.ExpProfits as List<FileExpProfitDto>;
if (expProfitDtos != null && expProfitDtos.Any(ep => ep.EditStatus == EditStatus.Added))
{
    GenerateFileExpProfitSorting(expProfitDtos, value.File);
}
expProfitDtos = expProfitDtos.OrderByDescending(c => c.EditStatus).ToList();
var expProfits = ProcessDetailsFileExpProfitEntityState<FileExpProfitDto>(expProfitDtos);

И деталь ProcessDetailsFileExpProfitEntityState ():

protected List<FileExpProfit> ProcessDetailsFileExpProfitEntityState<TDto>(List<TDto> dto, IMapper dtoToEntityMapper = null) where TDto : UpdatableDto 
        {
            if (dto == null)
            {
                return null;
            }
            DbContext ctx = GetDbContext<FileExpProfit>();

            List<FileExpProfit> result = new List<FileExpProfit>();
            foreach (var dtoItem in dto)
            {
                FileExpProfit itemEntity = null;
                FileExpProfit itemCacheEntity = null;
                if (dtoToEntityMapper == null)
                {
                    itemCacheEntity = dtoItem.AutoMapper<FileExpProfit>();
                }
                else
                {
                    itemCacheEntity = dtoToEntityMapper.Map<FileExpProfit>(dtoItem);
                }

                if (dtoItem.EditStatus == EditStatus.Modified)
                {
                    itemEntity = DbContext.FileExpProfits
.Where(d => d.FileExpProfitID == itemCacheEntity.FileExpProfitID)
.FirstOrDefault();
                    itemEntity.GrpCode = itemCacheEntity.GrpCode;
                    itemEntity.UserID = itemCacheEntity.UserID;
                    //ctx.Set<FileExpProfit>().Attach(itemEntity);
                    ctx.Entry(itemEntity).State = EntityState.Modified;
                    var bo=DbContext.SaveChanges() > 0;
                    Console.WriteLine(bo);
                }

                result.Add(itemEntity);
            }

            return result;
        }

При выполнении программы появляется ошибка: DbContext.SaveChanges().

Кто-нибудь видел это или кто-нибудь знает, чтосообщение об ошибке относится к?

1 Ответ

0 голосов
/ 16 октября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...