Member 13053943 Ответов: 2

Обнаружен недостижимый код


Я совершаю транзакцию в своем коде, и я получаю обнаруженный недостижимый код.Может ли кто - нибудь помочь мне исправить это?транс.Коммит не может быть достигнут,так как ему трудно найти решение.
после
<pre>return await _dbContext.SaveChangesAsync() > 0;

Я не могу дотянуться
trans.Commit()


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

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

            using (var trans = _dbContext.Database.BeginTransaction())
            {
                var db = new SibaCiidDbContext();
                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 <pre>&& 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);
                    }
                    

                }
                return await _dbContext.SaveChangesAsync() > 0;
                trans.Commit();

                

            }

        }

2 Ответов

Рейтинг:
14

Vincent Maverick Durano

Это потому что вы используете ключевое слово return до trans.Commit() Эта линия никогда не будет названа.

То, что вы можете сделать, это что-то вроде этого:

var result = await _dbContext.SaveChangesAsync();
trans.Commit();
if(result > 0)
      return true;
return false;


Member 13053943

это не сработало,я все время получаю "не могу неявно преобразовать тип int в System.Threading.Task.Task" и "> не могут быть использованы для типов int и void"

Vincent Maverick Durano

Я не видел, что ваш метод ожидает задачу "bool". То, что вы можете сделать, это либо:

измените свой метод на Task<int>
или сделать что-то вроде этого:

если(результат > 0)
вернуть true;
еще
возвращать false;

Member 13053943

я исправил его, братан,спасибо.так как это bool, он должен возвращать true или false

Vincent Maverick Durano

Я обновил код, основываясь на своем предложении исправить это.

Vincent Maverick Durano

О, круто. Рад, что теперь это работает на вас. Пожалуйста, не забудьте закрыть эту тему, Если ваша проблема будет решена ради будущих читателей. Спасибо!

Рейтинг:
0

Member 13053943

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


Vincent Maverick Durano

это всегда будет возвращать истину. Если вам не нужен результат, то вы можете просто сделать:

ждут _dbContext.SaveChangesAsync() ;
транс.Совершать();
вернуть true ;