在 foreach 循环中使用 savechanges() c#
Using savechanges() inside foreach loop c#
我下面有这个方法,就是将数据写入数据库中的两个表。我需要在 foreach 部分中将一个集合写入数据库。为什么 saveChanges 在循环的每次迭代中都不起作用,有更好的方法吗?
有两件事...... first:the 函数没有 return 任何东西...... second:the 数据库不是最新的......当我从函数中删除 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;
}
}
我只将 savechange() 方法放在 froreach 循环之外....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();
如果您要保存到数据库,您应该将这些更改排队,这样您就可以在最后进行一次写入并一次处理所有这些更改,而不是一次处理一个,这样您就可以利用数据库内部写入处理。
我下面有这个方法,就是将数据写入数据库中的两个表。我需要在 foreach 部分中将一个集合写入数据库。为什么 saveChanges 在循环的每次迭代中都不起作用,有更好的方法吗? 有两件事...... first:the 函数没有 return 任何东西...... second:the 数据库不是最新的......当我从函数中删除 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;
}
}
我只将 savechange() 方法放在 froreach 循环之外....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();
如果您要保存到数据库,您应该将这些更改排队,这样您就可以在最后进行一次写入并一次处理所有这些更改,而不是一次处理一个,这样您就可以利用数据库内部写入处理。