1

我正在使用实体框架 4。在一个表单中,我有一个DataGridView分配为DataSource. 然后,我有两个按钮。删除historial_borrarlist() 的最后一个 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();
    }
}

这段代码没有例外,但是当我关闭并重新打开该表单时,我删除的所有对象实际上都在那里。

4

0 回答 0