DataTableで作業しているときにこのバグが見つかりました。 DataTableにプライマリキー列を追加しました。そのテーブルに1つの行を追加し、その行を削除し、同じキーを持つ行をテーブルに追加しました。これは機能します。私がRejectChanges()
に電話しようとしたとき、私はConstraintException
という値がすでに存在すると言っています。ここで は一例です:RejectChangesのDataTableスロー例外
var dataTable = new DataTable();
var column = new DataColumn("ID", typeof(decimal));
dataTable.Columns.Add(column);
dataTable.PrimaryKey = new [] {column };
decimal id = 1;
var oldRow = dataTable.NewRow();
oldRow[column] = id;
dataTable.Rows.Add(oldRow);
dataTable.AcceptChanges();
oldRow.Delete();
var newRow = dataTable.NewRow();
newRow[column] = id;
dataTable.Rows.Add(newRow);
dataTable.RejectChanges(); // This is where it crashes
私は(行が削除された状態であるため、制約が破られていない)行が削除されているため、例外がスローされるべきではないと思います。私はこれについて何かできることはありますか?どんな助けもありがとうございます。
私が拒否されている最初は、あなたのdelete
動作であるので、これは、次のバグの問題よりも、同じ原因であることを前提とし
これは類似していますが、逆の順序でロールバックする必要はありません。まず「削除されていない」行と削除された行の変更を拒否する必要があります。 – Vale
2番目の回避策は機能します(ただし、どのように制約を無効にしますか)。たとえば、最後の行を削除したり、前の行のIDを変更したりすることができるため、最初の方法は一般的な解決策ではありません。 – Vale
@Vale:私の答えを編集して、正しいロールバックオーダーを強制する方法を示しました。 –