DataTableでのロールバックを手軽に実装する
DataTableは、ただのデータの入れ物ではない。CLRのメモリ上でDBのトランザクション(CRUDやコミット/ロールバックなど)と同様の処理を実装するための、各種メソッドが提供されている*1。
ロールバックを実装するための方法も提供されている。しかしその仕様は複雑で、非接続型データアクセスの全容を知らずには使いこなすことができないように思われる*2。
そこで、手軽にロールバックを実装する方法を考えた。その方法とは以下のとおりである。
- <オリジナルDataTable>.Copy()とし、テンポラリDataTableを作成する
- 後にロールバックするかもしれない全ての変更操作は、テンポラリDataTableに対し行う
- ロールバックするには、テンポラリDataTableを破棄する
- コミットするには、オリジナルDataTableに対し以下の手順を行う
DataTableのAcceptChangesやRejectChangesなどの使い方を覚えるのも良いが、Copy→Clear→Mergeの方がシンプルで使いやすいのではないか。