我正在使用实体框架4.在表单中,我有一个DataGridView
,其中包含一个分配为DataSource
的实体列表。然后,我有两个按钮。一个删除列表的最后一个实体(historial_borrar
)(lista_historial_prestamo
),实际上是DataGridView
的第一行:
Historial_estado_prestamo historial_borrar =
(Historial_estado_prestamo)dgv_Historial_estado_prestamo.Rows[0].DataBoundItem;
dgv_Historial_estado_prestamo.DataSource = null;
lista_historial_prestamo.Remove(historial_borrar);
historial_borrar.Prestamo.Estado_prestamo =
lista_historial_prestamo.OrderByDescending(x => x.fecha_hora).First().Estado_prestamo;
db.DeleteObject(historial_borrar);
db.SaveChanges();
然后,另一个按钮,将新实体添加到数据库中。
Historial_estado_prestamo historial_nuevo = new Historial_estado_prestamo();
historial_nuevo.fecha_hora = DateTime.Now;
historial_nuevo.Estado_prestamo = db.Estado_prestamo.Where(x => x.id_estado_prestamo == 2)
.FirstOrDefault();
prestamo_seleccionado.Historial_estado_prestamo.Add(historial_nuevo);
dgv_Historial_estado_prestamo.DataSource = null;
lista_historial_prestamo.Add(historial_nuevo);
lista_historial_prestamo = lista_historial_prestamo.OrderByDescending(x => x.fecha_hora)
.ToList();
prestamo_seleccionado.Estado_prestamo =
lista_historial_prestamo.FirstOrDefault().Estado_prestamo;
db.SaveChanges();
每次点击按钮时,我都会刷新DataSource
(DataGridView
)的dgv_Historial_estado_prestamo
。
我的想法是,如果我添加一个,我就可以删除它之后的那个。
如果我添加一个,然后删除那个。我得到OptimisticConcurrencyException
。
我真的不知道为什么!每次删除对象或将其添加到数据库时,我SaveChanges()
。我也将其从datasource
列表中删除。
我在添加对象后删除对象时会出现此异常。
我一直在阅读一些帖子并尝试过这个:
{
Historial_estado_prestamo historial_borrar =
(Historial_estado_prestamo)dgv_Historial_estado_prestamo.Rows[0].DataBoundItem;
dgv_Historial_estado_prestamo.DataSource = null;
lista_historial_prestamo.Remove(historial_borrar);
historial_borrar.Prestamo.Estado_prestamo =
lista_historial_prestamo.OrderByDescending(x => x.fecha_hora)
.First()
.Estado_prestamo;
db.DeleteObject(historial_borrar);
try
{
db.SaveChanges();
}
catch (OptimisticConcurrencyException)
{
db.Refresh(RefreshMode.ClientWins, historial_borrar);
db.SaveChanges();
}
}
我没有这个代码的例外,但当我关闭并重新打开该表单时,我删除的所有对象实际上都存在。