实体框架OptimisticConcurrencyException问题

时间:2013-01-30 18:36:38

标签: c# entity-framework-4 add optimistic-concurrency

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

每次点击按钮时,我都会刷新DataSourceDataGridView)的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();
    }
}

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

0 个答案:

没有答案