2016-05-16 14 views
3

Entity Framework 7でトランザクションをロールバックする方法はありますか。古いバージョンでEntity Framework 7ロールバックメソッド

、我々は今、私は

"EntityFramework.Commands" を使用

  try 
      { 
       dataContext.ChangeTracker.DetectChanges(); 
       dataContext.SaveChanges(); 
      } 
      catch (Exception e) 
      { 
       dataContext.Database.CurrentTransaction.Rollback(); 
       Debug.WriteLine(e.Message); 
      } 

を持っている: "7.0.0-RC1-ファイナル"

それはdoesnのを方法はありません。

+3

しかし、SaveChangesメソッドは、カバーの下のトランザクションですでに実行されます。

using (var transaction = context.Database.BeginTransaction()) { try { /*do something*/ context.SaveChanges(); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); } } 

またEF7は(EF6ない)非同期APIを提供します。したがって、SaveChangesが失敗した場合、そのトランザクションはロールバックされます。 – Evk

+0

@Evkは、古いEFでは、 'SaveChanges'がトランザクションの失敗をカバーしていますか?もしそうなら、「ロールバック」メソッドが発明されたのはなぜですか? –

+6

私が知っている限り、それは常にトランザクションでラップされました。なぜロールバックがあるのか​​については、dataContext.Database.BeginTransaction()を使って明示的にトランザクションを開始することができます。たとえば、SaveChangesを複数回呼び出すことができます。ロールバックしたい場合は、ロールバックを呼び出す必要があります。 – Evk

答えて

4

7.0.0-rc1-finalで推奨トランザクションパターンはEF6の場合と同じである:

using (var transaction = await context.Database.BeginTransactionAsync()) 
+1

現在、[docs](https://docs.microsoft.com/en-us/ef/core/saving/transactions)には、「いずれかのコマンドが失敗した場合にトランザクションが自動ロールバックされる」と記載されています – smg

関連する問題