Ordinal 列を持つテーブルに一意のインデックスを持つテーブルがあります。たとえば、テーブルには次の列があります。
TableId、ID1、ID2、序数
一意のインデックスは、ID1、ID2、序数の列にまたがっています。
私が抱えている問題は、データベースからレコードを削除するときに、序数を再配列して、再び連続するようにすることです。私の削除機能は次のようになります。
public void Delete(int id)
{
var tableObject = Context.TableObject.Find(id);
Context.TableObject.Remove(tableObject);
ResequenceOrdinalsAfterDelete(tableObject);
}
問題は、 Context.SaveChanges() を呼び出すと、ステートメントが渡された順序とは異なる順序で実行されるように見えるため、一意のインデックスが壊れることです。たとえば、次のことが起こります。
- 序数の並べ替え
- レコードを削除する
それ以外の:
- レコードを削除する
- 序数の並べ替え
これは EF の正しい動作ですか? もしそうなら、この動作をオーバーライドして実行順序を強制する方法はありますか?
うまく説明できていなかったら、教えてください...