0

私は EF 4.4 を使用しており、多くのエンティティを更新したいと考えていますが、最初のユーザーが変更したエンティティの多くを他のユーザーが変更できます。したがって、同時実行例外が発生します。他のケースでは、最初のユーザーが多くの新しいレジスターを追加しようとし、その間に他のユーザーがそれらのいくつかを追加しようとしました。そのため、一部のレジスタに存在する例外があります (一意の制約)。

最初のユーザーが操作を終了して、まだ存在しないレジスタのみを追加するようにしたいと思います (2 番目のユーザーによって追加されたエンティティを除くすべてのエンティティを追加します)。

そのためには、dbContext 内のエンティティを更新する必要があるため、少なくとも 2 つのオプションがあることがわかります。

まず、更新例外をキャプチャするときのキャッチで、次のことができます。

ex.Entries.Single().Reload();

2 番目のオプションは次のとおりです。

myContext.Entry<MyTable>(instance).Reload();

2 番目のオプションは、パラメーターとして使用するエンティティのみを更新すると思いますが、問題が多くのエンティティを更新する必要がある場合、どうすればそれを行うことができますか?

最初のオプションは実際には何をしますSingle().Reloadか?

4

2 に答える 2

1

あなたがするとき

ex.Entries.Single().Reload();

問題のあるエンティティが更新されていることを確認してください。が行うことは、データベースに保存できなかった唯一の ( Single) エンティティを から取得することです (同時実行例外の場合、これは常に正確に 1 つです)。DbUpdateConcurrencyException.Entries

あなたがするとき

myContext.Entry(instance).Reload();

呼び出される前に変更されたエンティティが 1 つだけであることがわかっていない限り、適切なエンティティを更新したかどうかはわかりませSaveChanges。エンティティを子エンティティと共に保存すると、それらのいずれかが同時実行の問題を引き起こす可能性があります。

于 2013-05-04T19:37:05.633 に答える