Member 13053943 Ответов: 1

Цикл продолжает собирать одни и те же записи


Я сохраняю запись в своей базе данных, передавая 3 параметра, параметр number передается для выбора количества записей из одной таблицы в другую таблицу. Однако цикл продолжает вставлять одно и то же количество записей вместо того, чтобы проверять наличие существующих стикеркодов в другой таблице IntermediaryAssignment перед вставкой из таблицы распределения стикеров.оператор foreach, по-видимому, работает не очень хорошо
Скрыть Код Скопировать
if (dbSet.Any(s => s.StickerCode != sticker.StickerCode))


Пожалуйста, помогите.Кроме того, он также не обновляет IntermediaryDispatched

Что я уже пробовал:

public async Task<bool> Save(string company, int number,string
registrationNumber)
  {

      using (var trans = _dbContext.Database.BeginTransaction())
      {
          var db = new DatabaseContext();
         var dbSet = _dbContext.Set<IntermediaryAssignment>();

          // set the database
          var check =await  (from s in db.StickerDistributions
                       join i in db.IntermediaryAssignment
                       on s.CompanyCode equals i.CompanyCode
                       where s.Dispatched == false && s.CompanyCode == company
                        && s.StickerCode != i.StickerCode
                       select s).ToListAsync();

          var datas = await (from s in db.StickerDistributions
                            where s.Dispatched == false && s.CompanyCode ==
                            company && s.IntermediaryDispatched == false
                             select s).ToListAsync();

          var data = await (from s in db.StickerDistributions
                            where s.Dispatched == false && s.CompanyCode ==
                            company &&
                            s.IntermediaryDispatched == false
                            select s).Take(number).ToListAsync();

              var intermediary = (await _repo.FindBy(s => s.RegistrationNumber
             == registrationNumber && s.Status ==
              EntityStatus.Active)).FirstOrDefault();
       foreach (var sticker in data)
          {
              if (dbSet.Any(s => s.StickerCode != sticker.StickerCode))
              {
                  var entity = new IntermediaryAssignment();

                  entity.CompanyCode = sticker.CompanyCode;
                  entity.StickerCode = sticker.StickerCode;
                  entity.RegistrationNumber = intermediary.RegistrationNumber;
                  entity.Status = EntityStatus.Active;
                  entity.CreatedDate = DateTime.Now;
                  entity.Dispatched = false;
                  entity.IntermediaryType = intermediary.IntermediaryType;
                  // entity.Sticker.Id = sticker.Sticker.Id;
                  sticker.IntermediaryDispatched = true;
                  dbSet.Add(entity);
              }

          }
          Task results =  _dbContext.SaveChangesAsync() ;
           trans.Commit();
          return  true ;
      }

  }

ZurdoDev

Какая часть кода не работает?

Member 13053943

цикл foreach работает не очень хорошо,вот где возникает проблема from.it выбирает те же данные stickerdistribution table и set помещает их в dbSet<Intermediate>

1 Ответов

Рейтинг:
2

Gerry Schmitz

Похоже на злоупотребление эф.

Следует использовать хранимую процедуру и соединения.