1

私はエンティティ フレームワーク 4 を使用しています。フォームには、DataGridViewエンティティのリストが として割り当てられていDataSourceます。次に、2つのボタンがあります。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();

次に、もう 1 つのボタンで、新しいエンティティをデータベースに追加します。

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

アイデアは、1 つ追加すると、その後でその 1 つを削除できるということです。

そして、1 つ追加してから、それを削除するとします。を取得し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