0

我使用实体框架 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());
        }
    }

请注意,我的销售(实际上来自主/详细信息配置中的两个网格视图)以某种方式分离,我必须先将它们附加回来,但希望这与上述问题无关。

4

0 回答 0