私はエンティティ フレームワーク 4 を使用しています。フォームには、DataGridView
エンティティのリストが として割り当てられていDataSource
ます。次に、2つのボタンがあります。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();
次に、もう 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();
ボタンがクリックされるたびDataSource
にDataGridView
( )の を明らかに更新します。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();
}
}
このコードに例外はありませんが、そのフォームを閉じて再度開くと、削除したすべてのオブジェクトが実際に存在します。