EFには、直接の「変更の拒否」操作はありません。ChangeTracker
/内のエンティティエントリを調べて、ObjectStateManager
現在の値を変更されたエンティティの元の値で上書きできます。追加されたエンティティを切り離して、削除されたエンティティを変更されていないものに戻すこともできますが、ほとんどの場合、あなた(または内部的にEF)が独立した関連付け(関係)の状態を変更しなかった場合にのみ機能します。リレーションを操作する場合も、リレーションを元に戻す必要があるため、全体がはるかに複雑になる可能性があります。このような場合、データの再読み込みが簡単になります。
DbContext APIの変更を元に戻すには、次のことを試してください。
foreach (var entry in context.ChangeTracker
.Entries<YourEntityType>()
.Where(e => e.State == EntityState.Modified))
{
entry.CurrentValues.SetValues(entry.OriginalValues);
}
この場合、主な問題はエンティティの操作方法だと思います。ライブデータの変更を許可し、EFは変更が実行されたときにデータの一貫性を維持するために背後でロジックを実行しますが、後でそれらの変更は保存されないことを決定します。 。この場合、次のいずれかを実行する必要があります。
- 変更されたデータを破棄し、データセット全体をリロードします(コンテキストを再作成することにより)
- このロジックを分離して、ライブデータで機能しないようにし、変更が実際に確認された場合にのみデータ変更をEFコンテキストにプッシュします
あなたが何かをするためにそれを言うならば、文脈は何かをしている。それ自体が忙しくなることはありません。