MySQL サーバー側と ADO.NET スキーマ側 (XML スキーマ ファイルからロード) の両方で AutoIncrement が有効になっている ID 列を持ついくつかの DataTables があります。行を挿入するときにこれらの ID を気にする必要がないようにしたいと思います。それらの唯一の用途はテーブルの主キーを持つことだからです。外部キーの参照はありません。ただし、新しい行が追加される場合、DataTable には既に行が含まれています。つまり、ID が 1 から始まる行が DataTable に既に存在します。
ID 列の既定の AutoIncrementSeed 値は -1 で、AutoIncrementStep 値は 1 です (Visual Studio によって提供される既定値のままです)。dataTable.NewRow() で作成すると、ID -1 と 0 が取得されるため、一度に 2 つの新しい行を挿入するだけであれば、すべて問題ないようです。しかし、3 番目の行を追加する場合は、ID を取得します。 NewRow() によって 1 が割り当てられます。その後、ID = 1 の行が既に存在するため、dataTable.Rows.Add(...) を使用して新しい行を挿入しようとすると ConstraintException がスローされます。
ADO.NETスキーマのAutoIncrementのものを無効にすることは解決策ではないと思います.Rows.Add()で行を追加する前に、IDが一意であることを確認する必要があるためです。
この問題の簡単でエレガントな解決策は何ですか? 今のところ、これが非常に珍しい作業だとは想像できません。
ありがとうございました!