【发布时间】:2020-08-20 07:51:27
【问题描述】:
我正在使用 C# 和实体框架开发 Windows 窗体应用程序。我把客户购买的所有产品都放在了 DGVNewOrder 中。对于 DGVNewOrder 中的每个产品,我想为每个售出的产品更新(按名称)库存数量。这是我尝试过的代码:'''
Product pro = new Product();
for (int i = 0; i < DGVNewOrder.RowCount - 1; i++)
{
string Soled_Product_name = DGVNewOrder.Rows[i].Cells[0].Value.ToString();
pro = db.Products.Where(d => d.Name == Soled_Product_name ).FirstOrDefault();
int y = Convert.ToInt32(pro.QteInStock); // QteInStock befor selling
int x = Convert.ToInt32(DGVNewOrder.Rows[i].Cells[2].Value); // the sold quantity
pro.QteInStock = y - x; // The remaining quantity after the sale
db.Entry(pro).State = EntityState.Modified;
db.SaveChanges();
}
这里的问题是数量没有发生更新,但是所有产品的名称都更改为与 DGVNewOrder 中出现的第一个产品相同的名称 我也试过这个
string Soled_Product_name = DGVNewOrder.Rows[i].Cells[0].Value.ToString();
Product c = (from w in db.Products
where w.Name == Soled_Product_name
select w).First();
int y = Convert.ToInt32(pro.QteInStock);
int x = Convert.ToInt32(DGVNewOrder.Rows[i].Cells[2].Value);
c.QteInStock = y - x;
db.Entry(pro).State = EntityState.Modified;
db.SaveChanges();
但给出相同的结果
【问题讨论】:
-
尽量不要在循环之前创建
pro对象并在pro = db.Products之前使用var,不确定这是否有帮助,但只是尝试一下 -
我在代码中看不到任何可能导致这种情况发生的内容。也许问题是由代码的其他部分引起的。您是否在其他任何地方更改加载的产品?如果您能提供minimal reproducible example 会更好,以便我们帮助您发现问题。
-
不要修改 EF 的内部状态(
db.Entry(pro).state行)。 EF 很清楚哪些属性已被更改,而无需您告诉它。 -
您是否在数据库表的所有产品中看到相同的名称?或在您的 DataGridView 中?贴出的代码不足以重现问题小伙伴。
-
同样的结果@Sowmyadhar Gourishetty @ Neil
标签: c# winforms entity-framework-5