0

私は EF コードファーストで asp.net mvc に取り組んでいます。レコードのリストを一度に更新しようとしています。お気に入り、

foreach(var pat in listpats)
{
context.Entry<Patient>(pat).state=EntityState.Modified;
context.savechanges();
}

そして、それは私にとってはうまくいきます。listpats に 10 個のアイテムが含まれていて、更新中に 7 番目のアイテムで例外が発生したとします。最初の 6 項目が保存されます。しかし、更新中にエラーが発生しなかった場合は、すべてのレコードを一度に保存したいと考えています。エラーが発生した場合は、以前のすべての変更をロールバックする必要があります。EFコードの最初のモデルを使用してこれを達成するにはどうすればよいですか。私を導いてください。

4

2 に答える 2

0

foreachの外部でSaveChanges()を呼び出す必要があります。

foreach(var pat in listpats)
{
    context.Entry<Patient>(pat).state=EntityState.Modified;
}

context.SaveChanges();

このようにして、例外が発生した場合、すべてがロールバックされます

于 2012-12-10T10:57:51.863 に答える
0

他のコードでエンティティを変更した場合、foreach ループと context.Entry(pat).state=EntityState.Modified で明示的に変更しなくても、エンティティの状態が (同じコンテキスト内で) 変更されます。

したがって、すべての患者エンティティを変更した後、context.SaveChanges() を 1 回呼び出すだけで、エラーが発生すると自動的にロールバックされます。

要約すると、すべての患者エンティティを変更し、その後 context.SaveChanges() を呼び出します。これにより、EF は変更された状態 (エンティティを変更すると状態の変更が発生します) を持つすべてのエンティティを DB、context.SaveChanges() に伝播します。ロールバックに関して、このような単純なケースを処理します。

PS あなたの質問は、別のコンテキストで患者を変更したかどうか疑問に思っています。それが、現在のコンテキストの状態を手動で変更する理由です。

于 2012-12-10T12:59:31.607 に答える