Aitzaz Ahsan Ответов: 1

Почему в транзакции C# сохраняется последняя запись из цикла foreach


using (System.Data.Entity.DbContextTransaction dbTran = db.Database.BeginTransaction())
               {
                   try
                   {
                       foreach (var items in obj.ListOfItems)
                       {
                           _dbListModel.ItemMainCategory = items.ItemMainCategory;
                           _dbListModel.ItemSubCateogry = items.ItemSubCateogry;
                           _dbListModel.Quantity = items.Quantity;
                           _dbListModel.ItemName = items.ItemName;
                           _dbListModel.ItemPurpose = items.ItemPurpose;
                           _dbListModel.IsIssue = false;
                           _dbListModel.RequestNo = obj.MaterialRequest.RequestNo;
                           // check weather available in store or not
                           _dbListModel.IsAvailable = CheckStock(items.ItemName, items.Quantity);

                           db.tbl_RequestedMaterialDetial.Add(_dbListModel);
                           //db.SaveChanges();
                       }
                       _dbModelRequestDetail.RequestNo = obj.MaterialRequest.RequestNo;
                       _dbModelRequestDetail.WorkOderNo = obj.MaterialRequest.WorkOderNo;
                       _dbModelRequestDetail.TicketId = obj.MaterialRequest.TicketId;
                       _dbModelRequestDetail.ChassisNo = obj.MaterialRequest.ChassisNo;
                       _dbModelRequestDetail.RequstedDate = obj.MaterialRequest.RequstedDate;
                       _dbModelRequestDetail.Purpose = obj.MaterialRequest.Purpose;
                       _dbModelRequestDetail.Model = obj.MaterialRequest.Model;
                       _dbModelRequestDetail.Type = obj.MaterialRequest.Type;
                       _dbModelRequestDetail.ComputerName = GetUserIP();
                       _dbModelRequestDetail.Send = "F";
                       _dbModelRequestDetail.Status = "New Request";

                       _dbModelRequestDetail.Dept = obj.MaterialRequest.Dept;
                       _dbModelRequestDetail.Designation = obj.MaterialRequest.Designation;
                       _dbModelRequestDetail.EmpID = obj.MaterialRequest.EmpID;
                       _dbModelRequestDetail.RequestPersonName = obj.MaterialRequest.RequestPersonName;
                       db.tbl_MaterialRequestForm.Add(_dbModelRequestDetail);
                       // change the status of the items in requsiton and store

                       //The Transaction will be completed
                       db.SaveChanges();

                       //commit transaction
                       dbTran.Commit();
                   }

                   catch (Exception ex)
                   {
                       //Rollback transaction if exception occurs
                       dbTran.Rollback();
                   }


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

Я хочу сохранить все входящие записи из списка но он сохранил последнюю запись в списке может ли кто нибудь помочь мне пожалуйста

CHill60

Потому что ваше сохранение изменений не входит в цикл, который повторяет все элементы!

1 Ответов

Рейтинг:
0

OriginalGriff

Просто: у вас есть только один предмет, и вы продолжаете использовать его повторно.
Представьте себе, что у вас есть конверт и в него вы кладете карточки, каждая из которых содержит букву алфавита.
Вы кладете букву "А" в конверт и передаете его своему партнеру, который записывает номер на внешней стороне конверта.
Затем вы хватаете его обратно, прежде чем он успеет взглянуть на него, и засовываете туда букву "Б". Но... конверт может вместить только одно письмо, поэтому вы должны сначала удалить букву "А" и выбросить ее в мусорное ведро. Затем вы вручаете конверт своему партнеру, который записывает номер на внешней стороне конверта.
Затем вы хватаете его обратно, прежде чем он успеет взглянуть на него, и засовываете туда букву "С". Но... конверт может вместить только одно письмо, поэтому вы должны сначала удалить букву "В" и выбросить ее в мусорное ведро. Затем вы вручаете конверт своему партнеру, который записывает номер на внешней стороне конверта.
Это повторяется до тех пор, пока вы не используете "Z".

Ваш супруг смотрит на свой список номеров конвертов и открывает конверт, который соответствует любому из них - в нем находится последнее письмо, и ни одно из других.

Это то, что вы сделали здесь - вы добавляете один и тот же объект в свою коллекцию каждый раз по кругу цикла, но затем вы выбрасываете содержимое в пользу нового.
Если вы хотите добавлять разные данные каждый раз, вам нужно создавать новый экземпляр вашего класса в _dbListModel каждый раз, когда вы обходите цикл.

foreach (var items in obj.ListOfItems)
   {
   _dbListModel = new ... ();
   _dbListModel.ItemMainCategory = items.ItemMainCategory;
...


Aitzaz Ahsan

не могли бы вы изучить больше пожалуйста как я могу сохранить все элементы одновременно в базе данных пожалуйста