我使用实体框架 5 处理 Windows 窗体。
我有一个 datagridview 来记录新的销售和一个保存按钮来保存我的实体的更改。但在保存实体之前,我创建了一些新的库存对象。我有另一个 gridview 可以查看我的股票,但它是只读的。
我的问题如下:
- 销售和库存在我的数据库中更新,但是当销售的网格视图显示新的销售时,库存的网格视图没有更新以显示新的库存
- 如果在添加新销售时出错(比如插入数据库时出现外键错误),则在更正错误并重新单击保存后,销售插入一次,但库存插入两次(或与我一样多次)有错误信息)
我试图通过 createobject 方法创建我的库存,而不仅仅是使用新的键,但问题仍然存在。
这是我的保存按钮点击代码
private void SaveButton_Click(object sender, EventArgs e)
{
try
{
var txnsGr = (IEnumerable<TransactionsGroupee>)this.achatsGroupeeBindingSource.DataSource;
foreach (var txnGr in txnsGr)
if (txnGr.EntityState == EntityState.Detached)
ge.TransactionsGroupees.AddObject(txnGr);
var localTransactions = ge.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Where(ent => ent.Entity is Transaction).Select(ent => ent.Entity as Transaction);
var achats = localTransactions.Where(x => x.TransactionsGroupee.sens == (int)Sens.Achat);
foreach (Transaction txn in achats)
{
for (int i = 0; i < txn.quantite; i++)
{
Stock stock = ge.CreateObject<Stock>();
stock.Agence1 = agence;
stock.Transaction = txn;
ge.Stocks.AddObject(stock);
}
}
ge.SaveChanges();
}
catch (Exception ex)
{
StringBuilder err = new StringBuilder(ex.Message);
if (ex.InnerException != null)
err.AppendLine().Append(ex.InnerException.Message);
MessageBox.Show(err.ToString());
}
}
请注意,我的销售(实际上来自主/详细信息配置中的两个网格视图)以某种方式分离,我必须先将它们附加回来,但希望这与上述问题无关。