Использование savechanges () внутри цикла foreach c # - PullRequest
0 голосов
/ 09 октября 2019

У меня есть этот метод ниже, который записывает данные в две таблицы в базе данных. В разделе foreach есть коллекция, которую мне нужно записать в базу данных. почему saveChanges не работает в каждой итерации цикла и есть ли лучший способ сделать это? есть две вещи ... во-первых: функция не возвращает ничего ... во-вторых: база данных не обновилась .... когда я удалил savechange () из функции, которая работает, но без изменения значенийв базе данных.

if (_context.ProductPins.Where(a => a.ProductId == id && a.Status==false).Count() > 0)
        {
            var c = 0;
            var ProductPins = _context.ProductPins.Where(a=>a.Status==false && a.ProductId == id);
            foreach(var item in ProductPins)
            {
                ApplicationUser.Balance = ApplicationUser.Balance - product.BuyingPrice;
                item.Equals(true);
                _context.Statements.Add(new Statement
                {
                    Amount = product.BuyingPrice,
                    RecordDate = DateTime.Now,
                    Destination = false,
                    FromApplicationUserId = _userManager.GetUserId(User),
                    //ToApplicationUserId = nu,
                    BalanceType = BalanceType.currentbalance,
                });

                _context.Update(ApplicationUser);
                _context.Update(item);
                _context.SaveChanges();
                c++;
                if (c > count)
                {
                    break;
                }





            }

Ответы [ 2 ]

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

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

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

Я только вывел метод savechange () из цикла forreach .... savechanges () не должен быть внутри цикла

if (_context.ProductPins.Where(a => a.ProductId == id && a.Status==false).Count() > 0)
        {
            var c = 0;
            var ProductPins = _context.ProductPins.Where(a=>a.Status==false && a.ProductId == id);
            foreach(var item in ProductPins)
            {
                ApplicationUser.Balance = ApplicationUser.Balance - product.BuyingPrice;
                item.Equals(true);
                _context.Statements.Add(new Statement
                {
                    Amount = product.BuyingPrice,
                    RecordDate = DateTime.Now,
                    Destination = false,
                    FromApplicationUserId = _userManager.GetUserId(User),
                    //ToApplicationUserId = nu,
                    BalanceType = BalanceType.currentbalance,
                });

                _context.Update(ApplicationUser);
                _context.Update(item);

                c++;
                if (c > count)
                {
                    break;
                }





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