我正在使用实体框架 4。在一个表单中,我有一个DataGridView
分配为DataSource
. 然后,我有两个按钮。删除historial_borrar
list() 的最后一个 entity() 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();
}
}
这段代码没有例外,但是当我关闭并重新打开该表单时,我删除的所有对象实际上都在那里。